【发布时间】:2012-10-12 08:51:06
【问题描述】:
我有一个带有以下变量的类 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;
【问题讨论】:
-
是的,我知道 boolean 和 Boolean 之间的区别,我的应用程序抛出了这个异常,因为 spring/hibernate 试图将 atShop 设置为 null 而不是 false,但是我怎样才能让它设置为 false并且不为空?
-
哎呀,我讨厌人们在没有任何解释的情况下对答案投反对票,只是因为他们不完全是他们想要的。最重要的是像这样的问题,这个问题最初还不够清楚。这让我失去了提供帮助的意愿。
-
@Edwin Dalorzo:但不是我对答案投了反对票,这就是为什么我在我的问题中添加了编辑部分,因为我没有解释我已经理解这些差异是我的错布尔值和布尔值之间
-
据我所知,数据库中的布尔值将被映射为 1 或 0,因此您不需要 columnDefinition。如果你想确定,你可以像
true 1, false 0 那样在持久化文件中添加映射