删除与tapestry5休眠实体给出:[重复]“具有相同的标识符值不同的物体已经与所述会话相关联的”
题
<强>可能重复:强>结果 休眠:用相同的标识符值不同的对象是已经与所述会话
相关联的
我被抛出上删除的实体错误。我只在一个组的用户在同一时间,所以它的用户类多对一的关系。在页面I类有一个属性组:
@Property @Persist private Group group;
这填充上页活化:
public void onActivate(Group g) {
group = g;
}
当点击了删除ActionLink的,这被执行时:
@CommitAfter
public ListBillingUserGroups onActionFromDelete() {
for (User u : getUsersInGroup())
u.setGroup(null);
session.delete(group);
return listPage;
}
public List<User> getUsersInGroup() {
Criteria c = session.createCriteria(User.class)
.add(eq("company", ctx.getUser().getCompany()))
.add(eq("group", group));
return c.list();
}
当的组中没有任何用户,则删除发生,并且浏览器重定向到该列表页面(如预期)。但是,如果组具有在用户,然后我得到从休眠抛出异常,与消息:
a different object with the same identifier value was already associated with the session: [my.package.Group#10]
用堆栈跟踪:
org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:613)
org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:121)
org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:74)
org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:793)
org.hibernate.impl.SessionImpl.delete(SessionImpl.java:771)
... my code ...
如果我与替换onActionFromDelete方法的误差仍然发生:
@CommitAfter
public ListBillingUserGroups onActionFromDelete() {
for (User u : getUsersInGroup())
System.out.print(" >> " + u.getGroup());
session.delete(group);
return listPage;
}
错误仍然发生(相对于得到的约束voilation除外),但如果我将其替换为:
@CommitAfter
public ListBillingUserGroups onActionFromDelete() {
session.delete(group);
return listPage;
}
我得到的约束违反异常。
因此,它的行为就像调用getAllUsersInGroup方法改变组对象为表示相同的实体(同一类,相同的id)的另一个对象。任何线索,以什么我做错了吗?
解决方案
我想你应该尝试:
@Persist("entity")
由于@Pesist注释(不PARAMS)存储您的组对象的会话,你的时间将其删除,是一种超然的对象。
http://tapestry.apache.org/tapestry5/tapestry-hibernate /userguide.html
替代是存储组ID(而不是组对象),并在onActivate方法检索对象。
其他提示
我不知道挂毯,但在Hibernate中...
当试图删除的实体此消息发生的情况。:使用对象A(对类和id),而Hibernate会话已经有一个实例乙一个对应于该一对
例如,加载用户加载实体(可能懒惰)。因此,要删除该组,您应该使用已使用Hibernate作为该组的用户组实例(确切的Java对象)。如果您使用的另一个实例,您将得到异常。
有一个大约在Tapestry5维基本主题方法文档:
http://wiki.apache.org/tapestry/Tapestry5AvoidingDifferentObjectWithSameIDExceptions
HTH