我正在尝试在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循环中创建实体吗?这怎么可能?
答案 0 :(得分:4)
你应该每次在循环中实例化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);
}
答案 1 :(得分:3)
您始终保存相同的对象(因此更新它)移动
Users_Departments object = new Users_Departments() ;
在循环内部每次都创建一个新的