无法将布尔值设置为null

Hip*_*ray 18 java spring hibernate

我有一个类Shop与以下变量

@Column(columnDefinition = "bit")
private boolean atShop;
Run Code Online (Sandbox Code Playgroud)

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

from Person person
left join fetch person.shop
Run Code Online (Sandbox Code Playgroud)

当我尝试调用此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
Run Code Online (Sandbox Code Playgroud)

这是因为它试图在HSQL中将布尔值设置为null.我可以通过改变private boolean atShop;来解决这个问题,private Boolean atShop;但我想保持这个,boolean因为我将它保存在我的数据库中

有没有办法解决这个问题不改变的方式booleanBoolean

编辑:

我知道布尔值只能是true/false而布尔值可以设置为null,但有没有办法让hibernate/spring将此值设置为false(我认为它应该自动执行)而不是尝试将其设置为null并抛出此异常?

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

@Column(nullable = false, columnDefinition = "bit default 0")
private boolean atShop;
Run Code Online (Sandbox Code Playgroud)

Kum*_*tra 33

- boolean原始类型,并且只能具有值true or false.

-而它Boolean是一个包装器对象,可以给出一个值.

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


Dav*_*Rlz 10

而不是摆弄hibernate代码,将表定义更改为默认空值为false(或0).这样,当你从数据库中读取时,它将始终具有有效值(因为它是布尔值,更有意义)