使用Hibernate时如何在布尔属性中插入空值?

时间:2010-06-01 15:23:42

标签: java hibernate null nullable

我有一个带有布尔属性的类。当我实例化并持久化此类时,Boolean属性存储为“false”值而不是可预期的“null”。如何将布尔属性设置为“Null”?

3 个答案:

答案 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.SQLorg.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”。