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

Java 在Hibernate中使用注释定义默认列值,java,hibernate,ddl,Java,Hibernate,Ddl,我知道网上和网上都有很多这样的问题,但是所有的答案都建议使用columnDefinition,这是特定于数据库的,因此不适用于我,因为我正在使用的系统需要在不同的数据库上运行 我在有人请求使用此功能进行注释的地方找到了它。问题已经结束,表示将涵盖该功能。第二个问题显然添加了注释@生成的和其他一些注释,但我找不到任何关于如何使用这些新注释定义默认列值的文档 所以我的问题是:有人知道我如何定义带有注释的默认列值(而不是使用columnDefinition)吗 编辑:进一步澄清我的问题:当我添加一个新

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

我在有人请求使用此功能进行注释的地方找到了它。问题已经结束,表示将涵盖该功能。第二个问题显然添加了注释
@生成的
和其他一些注释,但我找不到任何关于如何使用这些新注释定义默认列值的文档

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


编辑:进一步澄清我的问题:当我添加一个新的非空列时,我需要Hibernate来更新现有的模式(将新列添加到相应的表中)。但由于该列为非null,因此数据库无法在不指定默认值的情况下创建该列(如果表中已有一些行)。因此,我需要指示Hibernate发出以下DDL语句:
ALTER TABLE my_TABLE ADD COLUMN new_COLUMN VARCHAR(3)默认的'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

}
@实体
@表(name=“我的实体”)
公共类SomeEntity扩展了BaseEntity{
公共静态最终类MyValueGenerator实现
值生成器{
@凌驾
公共字符串generateValue(会话,对象所有者){
返回“这是我的默认名称”;
}
}
@基本的
@列(name=“name”,insertable=true,updateable=true,nullable=false,length=255)
//这将添加一个DDL默认值
@ColumnDefault(“这是我的默认名称”)
//这将添加一个运行时默认值。
@GeneratorType(类型=MyValueGenerator.class)
私有字符串名称;
//接球手和接球手
}

以下内容适合我

@ColumnDefault(“0.0”)

@列(name=“avgRating”)


私人浮栅

谢谢,但这似乎只是在插入的实体上生成值。那不是我需要的。当DDL语句添加列时,我需要定义默认列值(我编辑了我的问题以使其更清晰)。@Jardo您是否尝试过“@ColumnDefault”注释?我将更新我的代码以反映更改。@Bbl这正是我需要的,谢谢。我只有一句话:Hibernate将注释中的值直接放入DDL语句中,因此如果要插入字符串,必须使用附加引号对其进行转义,否则将出现SQL错误。像这样
@ColumnDefault(“‘这是我的默认名称’”)
。如果您编辑您的答案以反映这一点,它将是完美的:)@ColumnDefault注释用于指定在使用自动模式生成器时应用的默认DDL值。(from)如何从另一个表中获取默认值?我必须从名为country的表中设置默认值,其中PK是country\u id(我想在countryname=“US”中设置为默认值)