不能将布尔值设置为 null

新手上路,请多包涵

我有一个带有以下变量的 Shop 类

@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。我可以通过将 private boolean atShop; 更改为 private Boolean atShop; 来解决这个问题,但我想将其保留为 boolean 因为我将其保存在我的数据库中

有没有办法在不将 boolean 更改为 Boolean 的情况下解决这个问题?

编辑:

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

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

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

原文由 Hip Hip Array 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 730
2 个回答

- boolean原始类型,其值只能是 true or false

-Boolean 是一个 包装对象 并且可以被赋予 值。

-Java 1.5 AutoBoxing 提供,因此您可以使用简单赋值运算符( =将布尔值转换为布尔值并返回布尔值,所以您可以-执行此操作-0 in你想要布尔值而不是布尔值的地方。

原文由 Kumar Vivek Mitra 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Dave Richardson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题