You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:30:58