在 Hibernate 中设置属性的默认值不起作用
Posted
技术标签:
【中文标题】在 Hibernate 中设置属性的默认值不起作用【英文标题】:Doesn't work setting default value of property in Hibernate 【发布时间】:2012-11-15 15:35:57 【问题描述】:我的实体中有一个布尔属性。这是我的注释:
@Column(name = "IS_ACTIVE", nullable = false, columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive()
return isActive;
但是columnDefinition="BIT DEFAULT 1"
不能完美运行。这是我得到的生成表结果的 SQL 代码:
IS_ACTIVE BIT(1) NOT NULL,
我做错了什么?
因此,当我尝试将此类的实例保存到数据库时,我得到了异常:
`com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'IS_ACTIVE' cannot be null`
如果我删除 nullable = false
属性:
@Column(name = "IS_ACTIVE", columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive()
return isActive;
所以我可以在这种情况下保存创建的对象。但它仍然是未设置默认值,我在数据库中此字段的值中得到 NULL。
有什么想法吗?如果它很重要,我会使用 MySQL Server 5.1。如果有任何帮助,我将不胜感激。提前致谢!
【问题讨论】:
【参考方案1】:尝试使用BOOLEAN
数据类型,像这样定义@Column
注释:
@Column(name = "IS_ACTIVE", columnDefinition = "boolean default true", nullable = false)
private Boolean active = true;
【讨论】:
不幸的是它没有帮助。数据库中只有 BIT 类型已更改为 TINYINT。但同样它没有收到默认值。感谢您的建议! 是的,当然。我仍然在测试模式下使用hibernate.hbm2ddl.auto
的create-drop。现在我在数据库中有IS_ACTIVE TINYINT(1) NOT NULL DEFAULT '0',
。很好!但为什么默认值为 NULL?你有什么想法吗?
当我尝试保存此类的实例时,我再次收到异常 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'IS_ACTIVE' cannot be null
...
尝试在类中初始化布尔值。更新了我的答案。
或者将布尔值改为原始布尔值。【参考方案2】:
参考此链接中的正确答案How to set default value in Hibernate
如果您想要一个真正的数据库默认值,请使用 columnDefinition - @Column(name = “myColumn”, nullable = false, columnDefinition = “int default 100”)。请注意,columnDefinition 中的字符串取决于数据库。此外,如果您选择这个选项,你必须使用动态插入,所以 Hibernate 不会在插入时包含具有空值的列。否则谈论默认是无关紧要的。
解决方案的关键是动态插入注解。您可以将其添加到您的实体类中,例如:@org.hibernate.annotations.Entity(dynamicInsert = true)
【讨论】:
以上是关于在 Hibernate 中设置属性的默认值不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Android/MIUI 在通知栏中设置小图标不起作用?显示的默认图标
ReactJS - CSS:在样式对象中设置 trasitionProperty 不起作用
在 Xcode 4.3 中设置属性值不固定/viewDidLoad 被多次调用