java - 如何在 for 循环 JPA 中保留实体?

标签 java hibernate 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 对象,如下所示:

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);
}

关于java - 如何在 for 循环 JPA 中保留实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299569/

相关文章:

java - 从按下的 JMenuItem 获取文本?

java - @OneToMany 映射的 Hibernate 用户字符串字段

java - 将日期从字符串类型转换为日期数据类型时出现类转换异常

python - 如果在 for 循环中,如何在单行中使用 "continue"

Javascript 图像预加载器不显示状态

java - 使用 Java 为 RSA-OAEP 加密中的标签提供值

java - XSLT:使用xpath表达式提取兄弟节点的最后x位

java - 如何在PreparedStatement中使用自动生成的@Id?

java - Java 中 int 与其旧值的比较

java - 通过 Java 代码搜索 XML