JPA/Hibernate DDL生成; CHAR与VARCHAR

Jef*_*ker 10 java database hibernate jpa hibernate-annotations

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

有谁知道我应该怎么做?我意识到我可以通过被黑客攻击的方言制作所有的Strings VARCHARS或CHARS,但这并不是数据库中总是适用的.

我希望能够使用注释或aop执行此操作,避免在我的类中自定义列定义文本.

谢谢.

小智 14

用数据库注释要映射到数据库中CHAR的字符串 @Column(columnDefinition="CHAR(<your-char-length>)").

  • 感谢您的回答,但是在我的最后一段中,我提到了这一点。我试图避免使用columnDefinition。我只是希望有一种更好的方法,因为这似乎是一个合理的需求。 (2认同)
  • 嗯,但是区别在于属性的内容。也就是说,文本直接放入模式ddl中,因此固有地是特定于数据库的。另外,我必须在文本中重复列的长度。这个特定的实例还不错,但是如果可以的话,值得避免。我必须承认,这看起来并不乐观。 (2认同)

Jef*_*ker 4

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

registerColumnType( Types.VARCHAR, 10, "char($l)" );
Run Code Online (Sandbox Code Playgroud)

这并不完全是我想要的,但已经足够好了。遗憾的是我没有早点发现这一点。