实体中有一个布尔字段:
@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;提交
答案 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
希望这有帮助。