繁体   English   中英

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

[英]How do I insert the null value in a Boolean attribute when using Hibernate?

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

首先,确保定义一个Boolean对象而不是boolean类型。

然后,如果您正在使用带有JPA属性的Hibernate,那么您可以添加@Column(nullable=true)以明确告诉Hibernate该列应该具有NULL作为默认值。

这是一个奇怪的问题。 具有null值的Boolean属性绝对应该存储为NULL ,而tinyint列类型允许存储。 我不能自己调查这个问题,但这是我要做的:

首先,我将激活Hibernate的DML语句和JBDC参数的日志记录,以确认Hibernate实际上正在传递NULL (它应该)。 相关类别(第3.5。日志记录 )是org.hibernate.SQLorg.hibernate.type

如果第一个测试没有揭示问题,我会尝试使用一个简单的测试类进一步隔离它,使用原始JDBC插入一个带null值的Boolean值(并且还读取它)。 如果这个测试不是肯定的,那么我会开始怀疑JDBC驱动程序。

你顺便使用什么JDBC驱动程序(和版本)? 如果您使用的是Microsoft驱动程序,请尝试使用最新版本的jTDS反之亦然 )。

首先,确保您尝试持久化的对象是布尔值而不是基本布尔值。 其次,您可以定义对应为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”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM