Как вставить нулевое значение в логический атрибут при использовании Hibernate? - PullRequest
5 голосов
/ 01 июня 2010

У меня есть класс с логическим атрибутом. Когда я создаю и сохраняю этот класс, атрибут Boolean сохраняется со значением «false» вместо ожидаемого «null». Как я могу установить для логического атрибута значение «Null»?

Ответы [ 3 ]

4 голосов
/ 01 июня 2010

Сначала убедитесь, что вы определили объект Boolean, а не тип boolean.

Затем, если вы используете Hibernate с атрибутами JPA, вы можете добавить @Column(nullable=true), чтобы явно указать Hibernate, что столбец должен иметь значение NULL по умолчанию.

3 голосов
/ 12 июня 2010

Это странная проблема. Атрибут Boolean со значением null определенно должен храниться как NULL, а тип столбца tinyint позволяет это. Я не могу исследовать проблему самостоятельно, но вот что я бы сделал:

Во-первых, я бы активировал ведение журнала операторов DML и параметров JBDC в Hibernate, чтобы подтвердить, что Hibernate действительно передает NULL (и так и должно быть). Соответствующие категории (глава 3.5. Регистрация ): org.hibernate.SQL и org.hibernate.type.

Если в первом тесте проблема не обнаружена, я бы попытался еще изолировать ее с помощью простого класса тестирования, использующего необработанный JDBC для вставки Boolean со значением null (а также чтения). Если этот тест не является положительным, то я бы начал подозревать драйвер JDBC.

Кстати, какой драйвер JDBC (и версию) вы используете? Если вы используете драйвер Microsoft, попробуйте использовать последнюю версию jTDS (и наоборот).

2 голосов
/ 04 июня 2010

Сначала убедитесь, что объект, который вы пытаетесь сохранить, является логическим, а не примитивным логическим. Во-вторых, вы можете определить столбец, соответствующий char (1), который может содержать «Y», «N» или нулевое значение. и, наконец, и самое главное, добавьте в hibernate.cfg.xml следующую строку: -

<property name="query.substitutions">'Y'=true,'N'=false</property>

если вы используете файл hibernate.properties, используйте следующее: -

hibernate.query.substitutions true 'Y', false 'N'

это поможет вам сохранить нулевые значения в столбце логического типа. и не забудьте сопоставить свойство как type = "boolean" в файле сопоставления.

...