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实体被添加了,我只是忘了包含它们而已