Hibernate布尔字段映射问题

时间:2014-07-12 09:12:49

标签: java hibernate jpa boolean

实体中有一个布尔字段:

@Column(name = "FREEFLAG", columnDefinition = "NUMBER(0,1) default 0", nullable = false)    
public boolean getFreeflag() {
   return freeflag;
}

数据库 - Oracle,字段FREEFLAG - NUMBER(0,1)

我尝试使用Hibernate从db获取对象,但如果db中的字段为null,则会出现异常:

Exception in thread "main" org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type

为什么默认值不起作用? 我如何在服务器端解决这个问题?我必须在db中有0或1个值。

我得到了解决方案 - Default value not working in hibernate。但我还是要修改数据库。我添加了DDL - alter table client modify freeflag default 0 not null DML - 更新客户端设置freeflag = 0,其中freeflag为null;提交

2 个答案:

答案 0 :(得分:1)

在您的一条评论中,您说过您的数据库允许此列的空值。在模式生成过程中,JPA Provider使用columnDefinition属性,因此我可以假设您在添加columnDefinition属性(也不是nullable=false)后尚未生成模式。设置默认值的columnDefinition中的提示未应用于数据库,因此您没有对此列进行默认设置并不奇怪。

您可以使其工作的另一种方法是为此字段创建自定义Converter,这将以您需要的方式保存值。有关转换器实现的更多信息here

答案 1 :(得分:0)

columnDefinition与数据库有关,因此有时可能会引起问题。我在网上搜索得到的是它有时有效但在某些情况下不起作用。另一种方法是使用下面链接中描述的prePersist方法技术:

http://www.coderanch.com/t/450124/ORM/databases/entity-Boolean-field-default

希望这有帮助。