【问题标题】:JPA: Is there any way to add a global prefix to constraint names?JPA:有没有办法为约束名称添加全局前缀?
【发布时间】:2015-10-21 04:36:37
【问题描述】:

我需要为我的所有数据库对象(如表和约束)添加一个全局前缀,这样当我提取 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 网站上的票,这可能与这个问题有关,也可能与此问题无关。无论哪种方式,它们仍然是开放票。

有什么解决办法吗?我不希望我的架构以一半的对象/约束丢失必要的前缀而告终。

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

【问题讨论】:

  • 你使用哪个休眠版本?
  • @javadev: 4.3.8.Final

标签: java hibernate jpa constraints prefix


【解决方案1】:

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

【讨论】:

  • 我明白了。我还没有找到任何解决方案。如果只能等待另一个主要版本,我想那让我别无选择。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多