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

gzjq41n4  于 2023-11-21  发布在  其他
关注(0)|答案(2)|浏览(251)

我知道在SO和网络上有很多这样的问题,但是所有的答案都建议使用columnDefinition,这是特定于数据库的,因此不适用于我,因为我正在工作的系统需要在不同的数据库上运行。
我发现了这个hibernate issue,有人请求了这个注解功能。这个问题已经关闭,说another issue将覆盖这个功能。第二个问题显然添加了注解@Generated和其他一些,但我找不到任何关于如何使用这些新注解定义默认列值的文档。
所以我的问题是:有谁知道如何用注解(而不是使用columnDefinition)定义默认列值吗?

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

polkgigr

polkgigr1#

我不认为你需要任何文档,java文档是自我解释的。如果我理解正确的话,你需要一种方法来设置字段的默认值。如果是的,请看下面的代码片段。

  1. @Entity
  2. @Table(name = "my_entity")
  3. public class SomeEntity extends BaseEntity {
  4. public static final class MyValueGenerator implements
  5. ValueGenerator<String> {
  6. @Override
  7. public String generateValue(Session session, Object owner) {
  8. return "This is my default name";
  9. }
  10. }
  11. @Basic
  12. @Column(name = "name", insertable = true, updatable = true, nullable = false, length = 255)
  13. // This will add a DDL default
  14. @ColumnDefault("'This is my default name'")
  15. // This will add a runtime default.
  16. @GeneratorType(type = MyValueGenerator.class)
  17. private String name;
  18. // getters and setters
  19. }

字符串

展开查看全部
mctunoxg

mctunoxg2#

下面的代码是为我工作。

  1. @ColumnDefault("'0.0'")
  2. @Column(name = "avgRating")
  3. private float avgRating;

字符串

相关问题