У меня есть класс с булевым атрибутом. Когда я инстанцирую и сохраняю этот класс, булев атрибут снабжен "ложным" значением вместо вероятного "пустого указателя". Как я могу установить булев атрибут на "Пустой указатель"?
Это странная проблема. Атрибут Boolean
с null
определенно предполагается сохранить как NULL
, и тип столбца tinyint
позволяет это. Я не могу самостоятельно исследовать проблему, но вот что я бы сделал:
Во-первых, Я бы активировал ведение журнала операторов DML Hibernate и параметров JBDC, чтобы подтвердить, что Hibernate фактически передает NULL
(и должен). Соответствующие категории (глава 3.5. Ведение журнала ): org.hibernate.SQL
и org.hibernate.type
.
Если первый тест не выявит проблемы, я бы попытался дополнительно изолировать ее с помощью простого тестового класса, использующего необработанный JDBC, чтобы вставить логическое значение
со значением null
( а также прочтите). Если этот тест не будет положительным, я бы начал подозревать драйвер JDBC.
Кстати, какой драйвер JDBC (и версию) вы используете? Если вы используете драйвер Microsoft, попробуйте последнюю версию jTDS (и наоборот).
Во-первых, убедитесь, что вы определяете объект Boolean
, а не тип boolean
.
Затем, если вы используете Hibernate с атрибутами JPA, вы можете добавить @Column (nullable = true)
, чтобы явно указать Hibernate, что столбец должен иметь значение NULL по умолчанию.
Сначала убедитесь, что объект, который вы пытаетесь сохранить, является логическим, а не примитивным логическим. Во-вторых, вы можете определить соответствующий столбец как 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" в файле сопоставления.