我需要为我的所有数据库对象(如表和约束)添加一个全局前缀,这样当我提取一个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网站上的门票,这可能与此问题有关,也可能没有。无论哪种方式,他们仍然是开放票。
这有什么解决方案吗?我不希望我的架构最终导致我的一半对象/约束缺少必要的前缀。
我不得不说,我发现它们有点草率提供一种机制来改变表的命名策略,但完全错过了约束。