【问题标题】:JPA/Hibernate DDL generation; CHAR vs. VARCHARJPA/Hibernate DDL 生成; CHAR 与 VARCHAR
【发布时间】:2011-01-18 10:38:36
【问题描述】:

我有一个 JPA/Hibernate 数据模型,我正在使用 Hibernate hbm2ddl 工具生成数据库 DDL。我在数据库中有一些应该是 CHAR 的字符串和一些可能是 VARCHAR 的字符串。我想尽量减少对 DDL 的手动编辑(我意识到有些事情必须发生)。

有人知道我应该怎么做吗?我意识到我可以通过被黑的方言制作所有字符串 VARCHARS 或 CHARS,但这在数据库中并不总是合适的。

我希望能够使用注解或 aop 来做到这一点,避免在我的类中自定义列定义文本。

谢谢。

【问题讨论】:

    标签: java database hibernate jpa hibernate-annotations


    【解决方案1】:

    @Column(columnDefinition="CHAR(<your-char-length>)").

    【讨论】:

    • 感谢您的回答,但在我的最后一段中,我提到了这一点。我试图避免使用 columnDefinition。我只是希望有更好的方法,因为这似乎是一个合理的愿望。
    • 添加注解和添加注解属性没有太大区别。
    • 啊,但不同的是属性的内容。即直接放入模式 ddl 中的文本,因此,本质上是特定于数据库的。另外,我必须复制文本中列的长度。这个特殊的例子还不错,但如果可以的话,值得避免。不过,我必须承认,它看起来并不乐观。
    【解决方案2】:

    所以,我终于发现可以在方言中指定一个类型的长度限制。所以,我决定长度小于 10 的任何东西都应该是 char,超过 10 的任何东西都应该是 varchar:

    registerColumnType( Types.VARCHAR, 10, "char($l)" );
    

    这并不是我想要的,但这已经足够了。可惜没早点发现。

    【讨论】:

      猜你喜欢
      • 2019-03-25
      • 2011-07-23
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2013-10-12
      • 2011-08-24
      • 2022-08-15
      相关资源
      最近更新 更多