java - JPA:有什么方法可以向约束名称添加全局前缀吗?

标签 java hibernate jpa constraints prefix

我需要向所有数据库对象(例如表和约束)添加全局前缀,这样当我提取 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/

相关文章:

java - Hibernate 忽略@OneToMany 映射的@JoinColumn 值

java - Spring数据JPA日志记录

java - JPA spring boot,通过持久属性的反射访问字段 XXXX 时出错

jpa - 从 Gradle 将选项传递给 JPAAnnotationProcessor

java - 如何通过以编程方式生成 KeyEvent 来模拟键盘输入(包括光标移动)

java - 有没有使用 maven 运行可执行 jar 的好方法?

java - Hibernate 5.1 中的 EnversSchemaGenerator 在哪里?

java - 单击复选框时如何设置另一个项目可见?

java - 如何在 Java 中记录未捕获的异常?

java - JPA - 通过 jpaql 创建表