Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在循环JPA中持久化实体?_Java_Hibernate_For Loop_Jpa - Fatal编程技术网

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

Java 如何在循环JPA中持久化实体?,java,hibernate,for-loop,jpa,Java,Hibernate,For Loop,Jpa,我试图在for循环中保存实体。但它只保存数据库中的最后一个实体。我的实体如下所示 @Entity @Table(name = "users_departments") public class Users_Departments extends AbstractBaseEntity { ...... } @Override @Transactional public T create(T entity) { entityManager.persist(entity); enti

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

@Entity
@Table(name = "users_departments")
public class Users_Departments extends AbstractBaseEntity {
......
}
@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;
    }
我编写了一个通用crud方法,将实体保存在数据库中,如下所示

@Entity
@Table(name = "users_departments")
public class Users_Departments extends AbstractBaseEntity {
......
}
@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;
    }
在服务方法中,我将用户列表和部门以及其他详细信息保存在数据库中,如下所示

@Entity
@Table(name = "users_departments")
public class Users_Departments extends AbstractBaseEntity {
......
}
@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;
    }
@Transactional
公共列表addUserstoDepartments(长deptId,列表useridList){
用户\部门对象=新用户\部门();
List userDeptList=new ArrayList();
对于(inta=0;a
调试时,此方法返回具有更新值的列表,但每个项都具有与“id”相同的值。因此,数据库中只有最后一条记录可用。我想所有其他记录都被替换了。有什么原因吗?
我不能在for循环中创建实体吗?怎么可能呢

每次在循环中都应该实例化
Users\u 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);
}
List userDeptList=new ArrayList();
对于(inta=0;a
您总是保存同一个对象(因此会对其进行更新),请移动

Users_Departments object = new Users_Departments() ;

在循环中创建一个新对象,每次它仍然是同一个对象。移动
用户\部门对象=新用户\部门()在loop@XtremeBaumer非常感谢:)作为旁注,没有必要在
create
内部调用
refresh
(并且
flush
手动更改可能也是多余的,除非您需要自动生成的id)