相关疑难解决方法(0)

在Hibernate中设置属性的默认值不起作用

我的实体中有一个布尔属性.这是我对它的注释:

@Column(name = "IS_ACTIVE", nullable = false, columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive() {
    return isActive;
}
Run Code Online (Sandbox Code Playgroud)

但是columnDefinition="BIT DEFAULT 1"没有完美的工作.这是我得到的生成表的SQL代码:

IS_ACTIVE BIT(1) NOT NULL,
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

因此,当我尝试将此类的实例保存到数据库时,我得到异常:

`com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'IS_ACTIVE' cannot be null`
Run Code Online (Sandbox Code Playgroud)

如果我删除nullable = false属性:

@Column(name = "IS_ACTIVE", columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive() {
    return isActive;
}
Run Code Online (Sandbox Code Playgroud)

所以我可以在这种情况下保存一个创建的对象.但它仍然没有设置默认值,我在数据库中的这个字段的值中得到NULL.

有什么想法吗?如果它很重要,我使用MySQL Server 5.1.我会非常感谢任何帮助.提前致谢!

java hibernate jpa hibernate-mapping hibernate-annotations

15
推荐指数
1
解决办法
4万
查看次数

使用Hibernate中的注释定义默认列值

我知道这里有很多关于SO和网络的问题,但是所有答案都建议使用columnDefinition哪个是特定于数据库的,因此不适合我,因为我正在研究的系统需要在不同的数据库上运行.

我发现了这个hibernate问题,有人请求注释这个功能.问题已经结束,说另一个问题将涵盖该功能.第二个问题显然添加了注释@Generated以及其他一些注释,但我找不到任何关于如何使用这些新注释定义默认列值的文档.

所以我的问题是:有谁知道如何用注释定义默认列值(而不是使用columnDefinition)?

编辑:进一步澄清我的问题:当我添加一个新的非空列时,我需要Hibernate来更新现有的模式(将新列添加到相应的表).但由于该列为非null,因此数据库无法在未指定默认值的情况下创建列(如果表中已存在某些行).所以我需要指示Hibernate发出以下DDL语句:ALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def'但它必须独立于使用的数据库.

java ddl hibernate

10
推荐指数
2
解决办法
2万
查看次数

Hibernate默认值

是否有一种方法可以使用hibernate为每个字段定义默认值,并且为了数据库大小,写入null而不是这些默认值?

对于inst.假设String的默认值是"".我希望Hibernate:

  1. 为每个字段返回"",在数据库中为NULL.
  2. 当我尝试写""时写入NULL给数据库

当然,我可以编写成千上万的Getters和Setter,但它可以自动完成吗?

java hibernate jpa

5
推荐指数
1
解决办法
1万
查看次数