[英]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.SQL
和org.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.