Spring Data JPA查询用户账户流水返回重复数据问题求助
问题原因与修复方案
问题根源
你在循环外部初始化了BankAccountStatement对象,每次循环只是修改这个对象的属性,然后把同一个对象的引用重复添加到列表中。由于列表里所有元素指向的都是同一个内存对象,最终所有条目都会显示最后一次循环设置的属性值,也就是数据库里最后插入的那条数据。
修复代码
把BankAccountStatement的实例化代码移到循环内部,每次循环创建一个新对象:
public List<BankAccountStatement> getAccountStatementForTheUser(String accountNumber) throws DataNotFoundException { BankAccount bankAccount = bankAccountService.getAccountByAccountNumber(accountNumber); List<TransactionType> transactionTypeList = transactionTypeRepository.findByBankAccount(bankAccount); List<BankAccountStatement> bankAccountStatementList = new ArrayList<>(); // 对象实例化移至循环内部 for (TransactionType transactionType: transactionTypeList){ BankAccountStatement bankAccountStatement = new BankAccountStatement(); bankAccountStatement.setAmount(transactionType.getAmount()); bankAccountStatement.setCurrentBalance(transactionType.getCurrentBalance()); bankAccountStatement.setDepositorOrWithDrawalName(transactionType.getDepositorOrWithDrawalName()); bankAccountStatement.setDescription(transactionType.getDescription()); bankAccountStatement.setTransactionDate(transactionType.getTransactionDate().toString()); bankAccountStatement.setTransactionType(transactionType.getTransactionType()); bankAccountStatement.setId(transactionType.getId()); bankAccountStatementList.add(bankAccountStatement); } System.out.println("The list size is "+bankAccountStatementList.size()); return bankAccountStatementList; }
说明
每次循环创建新的BankAccountStatement对象后,列表中的每个元素都会指向独立的内存实例,这样就能正确展示每条交易的不同数据,不会再出现全部重复最后一条的情况。
内容的提问来源于stack exchange,提问作者Ukeme Elijah
相关产品推荐
相关产品推荐

