Отображение гибернации - вставляемый / обновляемый = ложный - нельзя установить ноль - PullRequest
0 голосов
/ 06 марта 2019

У меня есть 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...