Hibernate数据库特定的columnDefinition值

时间:2009-12-22 07:13:23

标签: mysql hibernate database-design postgresql jpa

问题如下:我们使用带注释的hibernate作为O / R Mapper。

一些@Column注释看起来像:

@Column(columnDefinition = "longblob", name = "binaryData", nullable = true)

@Column(columnDefinition = "mediumtext", name = "remark", nullable = true)

columnDefinition属性是特定于mysql的

例如,在postgres上,columnDefinition值应为“bytea”和“varchar(999999)”

并且在oracle上可能还有别的东西。

目前Schema Export出现问题,例如在创建DDL语句时。

我能想到的可能的解决方法是 - 为DDL语句破解一些为文本替换的JDBC驱动程序(例如longblob-> bytea)。这很丑,但会以某种方式工作 - 使用hibernate xml配置而不是注释。这可能会奏效,但我更喜欢注释

有人知道其他选择吗? Hibernate特定的解决方法是可以的,例如如果columnDefinition属性可以包含方言特定值,如

@Column(columnDefinition = "mysql->mediumtext, postgres->varchar(999999)", name = "remark", nullable = true)

由于 霍尔格

2 个答案:

答案 0 :(得分:9)

为什么不使用与数据库无关的注释,如:

  • @Lob(在byte[]String财产上)
  • @Column(length=90000)(在String财产上)

并查看将在数据库中生成哪些列。他们很可能是你想要的类型。

答案 1 :(得分:4)

一些想法:

  • 一般情况下使用注释,但从Xml 重载它们是特定于数据库的情况。然后,您可以拥有一个特定于您的数据库的配置文件。
  • 在注释中使用java常量(它们必须是编译时常量,因此您受到限制)。您可以拥有多组Java常量,并指向要导出的Java常量。 (注意,当你指向另一个常数时,你必须重新编译所有内容。)
  • 我还使用方言在我的Configuration类中切换一些代码。配置类接收所有数据(来自注释或xml),然后可以对其进行后处理。
      

    例如,我已将连接符号从“||”更改在Oracle上使用SqlServer上的“+”   这在运行时很方便: - )