加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:14:35 所属栏目:Java 来源:网络整理
导读:我知道这里有很多关于SO和网络的问题,但是所有答案建议使用columnDefinition,这是特定于数据库的,因此不适合我,因为我正在研究的系统需要在不同的数据库上运行. 我发现这个hibernate issue有人请求注释这个功能.问题已经结束,说another issue将涵盖该功能.第
我知道这里有很多关于SO和网络的问题,但是所有答案建议使用columnDefinition,这是特定于数据库的,因此不适合我,因为我正在研究的系统需要在不同的数据库上运行.

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

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

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

解决方法

我认为你不需要任何文档,java文档是自我解释.
如果我理解正确,您需要一种方法来为字段设置默认值.如果是,请参阅以下代码段.
@Entity
@Table(name = "my_entity")
public class SomeEntity extends BaseEntity {

public static final class MyValueGenerator implements
        ValueGenerator<String> {
    @Override
    public String generateValue(Session session,Object owner) {
        return "This is my default name";
    }
}

@Basic
@Column(name = "name",insertable = true,updatable = true,nullable = false,length = 255)
// This will add a DDL default
@ColumnDefault("'This is my default name'")
// This will add a runtime default.
@GeneratorType(type = MyValueGenerator.class)
private String name;

// getters and setters

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读