Отображение гибернации — вставляемое/обновляемое = ложное — нельзя установить нуль

У меня есть отображение гибернации для некоторого 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 (optional - defaults to true): specifies that the mapped columns should be included in SQL UPDATE and/or INSERT statements. Setting both to false allows a pure "derived" property whose value is initialized from some other property that maps to the same column(s), or by a trigger or other application.

Итак, затем я пытаюсь обновить класс с новой сущностью, я просто устанавливаю новое поле entityId и вызываю session.saveOrUpdate(clazz) - все работает, как и ожидалось, и новая сущность устанавливается в БД.

Но если я попытаюсь установить значение null (удалить отношение Clazz <-> Entity), используя

clazz.setEntityId(null)

тогда соответствующий COLUMN в БД не обновляется, и при получении следующей записи я все равно получаю старый ненулевой объект.

Для эксперимента я также попытался установить для объекта сущности значение null (clazz.setEntity(null)) и — сюрприз! - это сработало!

Почему происходят такие вещи? Является ли установка нуля не равной обновлению для Hibernate?

Дополнительно: на уровне БД у меня нет триггерных механизмов, влияющих на это свойство.

Hibernate версия - 3.6.10.Final
OpenJDK 1.8.0_191

Во-первых, вы должны использовать более новую версию спящего режима. Второе: перейти к аннотациям. их намного легче читать. В-третьих: если вы не используете последовательность/идентификатор для идентификатора, идентификатор всегда должен иметь значение

XtremeBaumer 06.03.2019 11:57

Боюсь, теперь я не могу обновить спящий режим и/или использовать аннотации вместо xml-mapping. Знаете, иногда бывают и легаси-проекты)

Andrey_Murgin 06.03.2019 13:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
329
0

Другие вопросы по теме