无法将布尔值设置为 null

2022-09-01 21:52:25

我有一个具有以下变量的类商店

@Column(columnDefinition = "bit")
private boolean atShop;

使用此值,我正在使用 HSQL 从应用程序中检索此信息

from Person person
left join fetch person.shop

当我尝试调用此HSQL语句时,我得到以下错误

org.springframework.orm.hibernate3.HibernateSystemException: could not set a field value by reflection setter of com.test.dataobject.Shop.atShop; nested exception is org.hibernate.PropertyAccessException: could not set a field value by reflection setter of com.test.dataobject.Shop.atShop

它之所以抛出这个,是因为它试图在 HSQL 中将布尔值设置为 null。我可以通过更改为来解决此问题,但我想将其保留为a,因为我将其保存为数据库中的位private boolean atShop;private Boolean atShop;boolean

有没有办法在不改变的情况下解决这个问题?booleanBoolean

编辑:

我知道布尔值只能是真/假,布尔值可以设置为null,但是有没有办法让休眠/spring将此值设置为false(我认为它应该自动执行此操作),而不是尝试将其设置为null并引发此异常?

我还尝试添加注释以自动将值设置为false,但这也不起作用

@Column(nullable = false, columnDefinition = "bit default 0")
private boolean atShop;

答案 1

- boolean基元类型,并且只能具有 值 。true or false

-而 是包装器对象,可以给定一个值。Boolean

-提供了 From,因此您可以使用简单赋值运算符 () 将布尔值转换为布尔值并转换回布尔值,因此您可以在需要布尔值而不是布尔值的位置执行此操作。Java 1.5AutoBoxing=


答案 2

与其调理休眠代码,不如将表定义更改为默认 null 值 false(或 0)。这样,当您从数据库中读取时,它将始终具有有效的值(因为它是布尔值,因此更有意义)


推荐