У меня есть пользователь и объект credit_card, у пользователя есть коллекция credit_card. Первичный ключ для обеих этих сущностей, которые у меня есть, - это байт [].
Первый сеанс:
- Я открыл новую сессию.
- Выполните запрос критериев в таблице пользователей, которая на самом деле идет в БД и выбирает user + credit_cards, и, наконец, у меня есть пользовательский объект, скажем userObj.
- Закройте сеанс.
Второй сеанс:
- Я открыл еще одну сессию.
- попытка вызвать session.buildLockRequest (LockOptions.NONE) .lock (userObj);
Теперь hibernate попытается присоединить отсоединенный объект, но я получаю следующую ошибку:
org.hibernate.HibernateException: reassociated object has dirty collection reference
at org.hibernate.event.def.OnLockVisitor.processCollection(OnLockVisitor.java:71)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:122)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:83)
at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:77)
at org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:144)
at org.hibernate.event.def.AbstractReassociateEventListener.reassociate(AbstractReassociateEve ntListener.java:101)
at org.hibernate.event.def.DefaultLockEventListener.onLock(DefaultLockEventListener.java:82)
at org.hibernate.impl.SessionImpl.fireLock(SessionImpl.java:774)
at org.hibernate.impl.SessionImpl.fireLock(SessionImpl.java:766)
at org.hibernate.impl.SessionImpl.access$600(SessionImpl.java:156)
Я попытался отладить его в коде hibernate и обнаружил, что hibernate пытается проверить, действительно ли коллекция переданного объекта (credit_cards) принадлежит пользователю (который является user1).
Так что где-то глубоко внутри кода в hibernate, похоже, что он проверяет равенство с , равным методу первичных ключей переданного объекта (который является user1) и другого объекта, который он вызывает объект снимка.
Поскольку byte [], по сути, является массивом и завершается неудачно при проверке на равные и выдает вышеуказанную ошибку
Я знаю, что могу выполнить вышеуказанную работу всего за один сеанс, но это всего лишь сценарий.
Я попытался использовать Long / Integer в качестве первичного ключа, и он прекрасно работает, так как он проходит проверку на равенство.
Hibernate версия: 3.6.9.Final (я попытался взглянуть и на версию 4.1.1.Final, но файлы / код, которые выдают эту ошибку, не изменились)
БД: SQL сервер
Это проблема в спящем режиме или я делаю что-то не так?