Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 如何更改列表的值并在Hibernate中更新列表?_Java_Hibernate_Hibernate Mapping - Fatal编程技术网

Java 如何更改列表的值并在Hibernate中更新列表?

Java 如何更改列表的值并在Hibernate中更新列表?,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我有一个对象,其中有一个对象列表 我需要检索对象,删除它的所有项,添加更新的项并在数据库中更新它,但当我尝试更新列表时,它会遇到以下错误 org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already

我有一个对象,其中有一个对象列表

我需要检索对象,删除它的所有项,添加更新的项并在数据库中更新它,但当我尝试更新列表时,它会遇到以下错误

org.hibernate.NonUniqueObjectException: a different object with the same 
                                        identifier value was already 
                                        associated with the session
代码

                ...

                temporary.getItems().get(1).setName("P1");
                temporary.getItems().get(2).setName("P2");

                //retrieve selected user's object
                User user = (User) session.get(User.class, user.getId());

                //remove all of its items
                user.getItems().clear();

                //add updated items 
                //(same as items that has been removed but with new values)
                user.getItems().addAll(temporary.getItems());

                //persist new items
                for (int i = 0; i < user.getItems().size(); i++) {
                    session.update(user.getItems().get(i));
                }

                //update the object
                session.update(user);
                tx.commit();
public class User {

   @Id
   @GeneratedValue 
   private long id;

   @OneToMany
   @LazyCollection(LazyCollectionOption.FALSE)
   private List<UserItem> items;
   ...
}

public class UserItem {
   private Long id;
    ....
}
。。。
temporary.getItems().get(1.setName(“P1”);
temporary.getItems().get(2.setName(“P2”);
//检索所选用户的对象
User=(User)session.get(User.class,User.getId());
//删除其所有项目
user.getItems().clear();
//添加更新的项目
//(与已删除但具有新值的项目相同)
user.getItems().addAll(temporary.getItems());
//保留新项目
对于(int i=0;i
实体

                ...

                temporary.getItems().get(1).setName("P1");
                temporary.getItems().get(2).setName("P2");

                //retrieve selected user's object
                User user = (User) session.get(User.class, user.getId());

                //remove all of its items
                user.getItems().clear();

                //add updated items 
                //(same as items that has been removed but with new values)
                user.getItems().addAll(temporary.getItems());

                //persist new items
                for (int i = 0; i < user.getItems().size(); i++) {
                    session.update(user.getItems().get(i));
                }

                //update the object
                session.update(user);
                tx.commit();
public class User {

   @Id
   @GeneratedValue 
   private long id;

   @OneToMany
   @LazyCollection(LazyCollectionOption.FALSE)
   private List<UserItem> items;
   ...
}

public class UserItem {
   private Long id;
    ....
}
公共类用户{
@身份证
@生成值
私人长id;
@独身癖
@LazyCollection(LazyCollectionOption.FALSE)
私人清单项目;
...
}
公共类用户项{
私人长id;
....
}

发生异常是因为有两个对象具有相同的标识符(主键)。因此,我建议您将annontation@GeneratedValue添加到实体类中的id属性中。顺便说一句,你可以应用cascade来保存你的对象()

你能发布你的实体类吗?@TienNguyen实体被添加了,我只是忘了包含它们而已