Hibernate数据库特定的columnDefinition值

use*_*784 9 mysql postgresql database-design hibernate 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)

谢谢霍尔格

Boz*_*zho 9

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

  • @Lob(在一个byte[]或一个String财产上)
  • @Column(length=90000)(在String物业上)

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

  • 以及如何解决 `columnDefinition="json"` 的问题,我无法根据类型确定它是否是 json。Postgres 可以很好地理解 json,但在 H2 中,列创建将会失败。在这种情况下,我希望 hibernate 将列名映射到字符串。 (3认同)