Возможные Дублировать:
Hibernate: different object with the same identifier value was already associated with the sessionУдаление гибернации объект с tapestry5 дает: «другой объект с тем же значением идентификатора уже связан с сеансом»
У меня есть ошибка будучи брошенное на удаление объекта. Я имею пользователей только в одной группе за раз, так что это отношения ManyToOne в классе User. В классе страницы У меня есть свойство группы:
@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]
с StackTrace:
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 изменяет объект группы на другой объект, представляющий один и тот же объект (тот же класс, тот же идентификатор). Любые намеки на то, что я делаю неправильно?
Я думаю, что я использую один и тот же объект. У меня есть свойство класса страницы, которое заполняется гобеленом, когда запрашивается страница (группа, о которой я упоминал). Я использую эту группу в запросе, чтобы перечислить всех пользователей в группе с помощью API критериев, а затем попытаться удалить ее. Думаю, я мог бы перефразировать мой вопрос: «Почему они не одни и те же объекты?» – l0st3d
@ IOst3d Я предлагаю вам убедиться: откройте отладчик и проверьте, является ли он одним и тем же экземпляром (используйте идентификатор объекта Java, который отображается в отладчике). Этот момент необходим. – KLE