JPA:有没有办法为约束名称添加全局前缀?

时间:2015-07-30 00:18:59

标签: java hibernate jpa constraints prefix

我需要为我的所有数据库对象(如表和约束)添加一个全局前缀,这样当我提取一个DDL Schema时,它就会很好并且正确。

我知道如何在我的Java代码中指定约束名称(as described here)。

我也知道如何为表as described here添加全局前缀。这是我目前在项目中实施的内容。

我不知道如何将相同的全局前缀添加到约束名称。您可以看到,当Hibernates创建所有数据库表和约束时,它会执行以下操作:

Hibernate: alter table ABC_MYTABLE1 add constraint UK_MYTABLE1_COLUMN1 unique (column1)
Hibernate: alter table ABC_MYTABLE1 add constraint UK_MYTABLE1_COLUMN2 unique (column2)
Hibernate: alter table ABC_MYTABLE2 add constraint UK_MYTABLE2_COLUMN1 unique (column1)
Hibernate: alter table ABC_MYTABLE2 add constraint UK_MYTABLE2_COLUMN2 unique (column2)
...

' ABC'是我的全球前缀。请注意约束名称如何缺少前缀?我基本上需要的是:

Hibernate: alter table ABC_MYTABLE1 add constraint ABC_UK_MYTABLE1_COLUMN1 unique (column1)
Hibernate: alter table ABC_MYTABLE1 add constraint ABC_UK_MYTABLE1_COLUMN2 unique (column2)
Hibernate: alter table ABC_MYTABLE2 add constraint ABC_UK_MYTABLE2_COLUMN1 unique (column1)
Hibernate: alter table ABC_MYTABLE2 add constraint ABC_UK_MYTABLE2_COLUMN2 unique (column2)
...

这次表名和约束名都有前缀。

前缀字符串必须是可变的,我不能对其进行硬编码,因为我需要能够在配置文件中配置它或类似的东西。

我目前的问题是NamingStrategy类似乎没有提供任何修改约束名称的方法。我搜索了很多,但我发现的只是官方Hibernate网站上的门票,这可能与此问题有关,也可能没有。无论哪种方式,他们仍然是开放票。

这有什么解决方案吗?我不希望我的架构最终导致我的一半对象/约束缺少必要的前缀。

我不得不说,我发现它们有点草率提供一种机制来改变表的命名策略,但完全错过了约束。

1 个答案:

答案 0 :(得分:0)

当FK名称位于命名策略界面之一时,看起来Hibernate 5.0(或6?)会很容易(参见details here)。