我需要向所有数据库对象(例如表和约束)添加全局前缀,这样当我提取 DDL 架构时,一切都会很好且正确。
我知道如何在 Java 代码中指定约束名称 ( as described here )。
我还知道如何向表添加全局前缀,as described here 。这就是我目前在我的项目中实现的。
我不知道如何将相同的全局前缀添加到约束名称中。您会看到,当 Hibernate 创建所有数据库表和约束时,它会执行以下操作:
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 官方网站上的票证,这可能与这个问题有关,也可能无关。不管怎样,他们仍然是开放的门票。
有什么办法可以解决这个问题吗?我不希望我的模式最终导致一半的对象/约束缺少必要的前缀。
我不得不说,我觉得他们提供了一种改变表命名策略的机制,但完全忽略了约束,有点草率。
最佳答案
当 FK 名称位于命名策略界面之一时(请参阅 details here ),看起来使用 Hibernate 5.0(或 6?)会很容易做到这一点。
关于java - JPA:有什么方法可以向约束名称添加全局前缀吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31713292/