繁体   English   中英

如何在for循环JPA中持久化实体?

[英]How to persist entities inside for loop JPA?

我试图在for循环中保存实体。 但它只保存数据库中的最后一个实体。 我的实体看起来如下。

@Entity
@Table(name = "users_departments")
public class Users_Departments extends AbstractBaseEntity {
......
}

我编写了一个通用的crud方法来将实体保存在数据库中,如下所示。

@Override
@Transactional
public T create(T entity) {
    entityManager.persist(entity);
    entityManager.flush();
    entityManager.refresh(entity);
    return entity;
}

在服务方法中,我正在保存数据库中包含部门和其他详细信息的用户列表,如下所示。

 @Transactional
    public List<Users_Departments> addUserstoDepartments(Long deptId,List<Long> useridList){
       Users_Departments object = new Users_Departments() ;
       List <Users_Departments> userDeptList = new ArrayList<>();
            for(int a=0 ; a < useridList.size();a++){                   
            object.setDepartment(departmentDao.find(deptId));
            object.setStation(userDao.find(useridList.get(a)));
            object.setCreatedDate(new Date());
            object.setUpdatedDate(new Date());

            Users_Departments newlyCreated = users_departmentsDao.create(object);
            userDeptList.add(newlyCreated);
        }
        return  userDeptList;
    }

调试此方法时返回带有更新值的列表,但每个项目都具有与“id”相同的值。 因此,只有数据库中的最后一条记录可用。 我认为所有其他记录都已被替换。 有什么理由吗? 我不能在for循环中创建实体吗? 这怎么可能?

您应该每次在循环内实例化Users_Departments object ,如下所示:

List <Users_Departments> userDeptList = new ArrayList<>();
for(int a=0 ; a < useridList.size();a++){   
    Users_Departments object = new Users_Departments();             
    object.setDepartment(departmentDao.find(deptId));
    object.setStation(userDao.find(useridList.get(a)));
    object.setCreatedDate(new Date());
    object.setUpdatedDate(new Date());

    Users_Departments newlyCreated = users_departmentsDao.create(object);
    userDeptList.add(newlyCreated);
}

你总是保存相同的对象(因此更新它)移动

Users_Departments object = new Users_Departments() ;

在循环内部每次创建一个新的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM