我有一个带有布尔属性的类。当我实例化并持久化此类时,Boolean属性存储为“false”值而不是可预期的“null”。如何将布尔属性设置为“Null”?
答案 0 :(得分:4)
首先,请确保定义Boolean
对象而不是boolean
类型。
然后,如果您正在使用带有JPA属性的Hibernate,那么您可以添加@Column(nullable=true)
以明确告诉Hibernate该列应该具有NULL作为默认值。
答案 1 :(得分:3)
这是一个奇怪的问题。具有Boolean
值的null
属性肯定应存储为NULL
,而tinyint
列类型允许存储。我自己无法调查这个问题,但这就是我要做的事情:
首先,我将激活Hibernate的DML语句和JBDC参数的日志记录,以确认Hibernate实际上正在传递NULL
(它应该)。相关类别(第3.5. Logging章)为org.hibernate.SQL
和org.hibernate.type
。
如果第一个测试没有揭示问题,我会尝试使用原始JDBC进一步隔离它,使用原始JDBC插入Boolean
null
值(并且还读取它) )。如果这个测试不是肯定的,那么我会开始怀疑JDBC驱动程序。
顺便说一句,您使用的是什么JDBC驱动程序(和版本)?如果您使用的是Microsoft驱动程序,请尝试使用最新版本的jTDS(反之)。
答案 2 :(得分:2)
首先,确保您尝试保留的对象是布尔值而不是基本布尔值。其次,您可以定义对应为char(1)的列,它可以保存'Y','N'或null值。最后,最重要的是在hibernate.cfg.xml中添加以下行: -
<property name="query.substitutions">'Y'=true,'N'=false</property>
如果您使用的是hibernate.properties文件,请使用以下命令: -
hibernate.query.substitutions true 'Y', false 'N'
这将帮助您将空值存储到布尔类型列。并且不要忘记在映射文件中将属性映射为type =“boolean”。