У меня есть hibernate-mapping для некоторого Clazz и отношение «многие к одному» для него:
<property name="entityId" column="ENTITY" type="java.lang.Long"/>
<many-to-one name="entity" column="ENTITY" class="Entity" insert="false" update="false"/>
Как сказано в документации сообщества :
update, insert (необязательно - по умолчанию true): указывает, что сопоставленные столбцы должны быть включены в операторы SQL UPDATE и / или INSERT.Установка обоих значений в false допускает чисто «производное» свойство, значение которого инициализируется из какого-либо другого свойства, которое отображается в тот же столбец (столбцы), или с помощью триггера или другого приложения.
Итак, тогда япопробуйте обновить класс новой сущностью, я просто устанавливаю новое поле entityId и вызываю session.saveOrUpdate(clazz)
- все работает, как ожидалось, и новая сущность устанавливается в БД.
Но если я пытаюсь установить ноль (delete Clazz <-> отношение сущности), используя
clazz.setEntityId(null)
, тогда соответствующая COLUMN в БД не обновляется, и при получении следующей записи я все еще получаю старую ненулевую сущность.
Для эксперимента я попыталсяустановить объект сущности на ноль (clazz.setEntity(null)
) и - сюрприз!- это сработало!
Почему такие вещи случаются?Не равно ли значение null обновлению для Hibernate?
Дополнительно: на уровне БД у меня нет триггер-подобных механизмов, влияющих на это свойство.
Версия Hibernate - 3.6.10. Финал
OpenJDK 1.8.0_191