使用 Hibernate 自动生成的名称进行约束是个好主意吗?
Is that good idea to use Hibernate autogenerated names for constraint?
Hibernate 在自动生成的约束名称中包含散列,并且没有任何人类可读的部分。
比如我运行mvn hibernate4:export
:
alter table users
add constraint FK_iy6c08j4gj1opcg1f3m0iwnv0
foreign key (shop_id)
references shop (id);
如果您只知道 FK_iy6c08j4gj1opcg1f3m0iwnv0
,则不可能猜出 tables/columns 该约束与什么相关。
我不知道有任何工具可以通过给定的约束名称找到相应的列。我总是挖掘自定义供应商特定的 INFORMATIONAL
架构查询。
我需要使用@ForeignKey
还是@UniqueConstraint
:
@JoinColumn(name = "BAR_ID", foreignKey = @ForeignKey(name = FK_BAR_OF_FOO))
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "ID", name = "PERSONS_PK_CONSTRAINT"))
如果我使用 LiquiBase 或手工制作的更新脚本?我认为 DBA 在命名方面比 Hibernate 更聪明。
是的。我使用 LiquiBase,我可以告诉你自动生成的 FK 名称是相同的,因为不是 LiquiBase 做这个工作,而是 Hibernate。
我有一个自己的 LiquiBase 配置到 maven 中,它创建了我称之为 autologs 的临时文件,其中包含增量差异(它是通过 [=10= 获得的自动更新日志) ]).
我从不copy/paste直接将自动日志记录到更新日志中,相反,我总是查看它,修复那些我不喜欢的东西,最后将其包含到更新日志中。
我手动执行的这个审核过程会检查几个要点,例如 FK 名称。
Hibernate 在自动生成的约束名称中包含散列,并且没有任何人类可读的部分。
比如我运行mvn hibernate4:export
:
alter table users
add constraint FK_iy6c08j4gj1opcg1f3m0iwnv0
foreign key (shop_id)
references shop (id);
如果您只知道 FK_iy6c08j4gj1opcg1f3m0iwnv0
,则不可能猜出 tables/columns 该约束与什么相关。
我不知道有任何工具可以通过给定的约束名称找到相应的列。我总是挖掘自定义供应商特定的 INFORMATIONAL
架构查询。
我需要使用@ForeignKey
还是@UniqueConstraint
:
@JoinColumn(name = "BAR_ID", foreignKey = @ForeignKey(name = FK_BAR_OF_FOO))
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "ID", name = "PERSONS_PK_CONSTRAINT"))
如果我使用 LiquiBase 或手工制作的更新脚本?我认为 DBA 在命名方面比 Hibernate 更聪明。
是的。我使用 LiquiBase,我可以告诉你自动生成的 FK 名称是相同的,因为不是 LiquiBase 做这个工作,而是 Hibernate。
我有一个自己的 LiquiBase 配置到 maven 中,它创建了我称之为 autologs 的临时文件,其中包含增量差异(它是通过 [=10= 获得的自动更新日志) ]).
我从不copy/paste直接将自动日志记录到更新日志中,相反,我总是查看它,修复那些我不喜欢的东西,最后将其包含到更新日志中。
我手动执行的这个审核过程会检查几个要点,例如 FK 名称。