Hibernate在自动生成的约束名称中包含散列,并且没有任何人类可读的部分。
例如,我运行mvn hibernate4:export
:
alter table users
add constraint FK_iy6c08j4gj1opcg1f3m0iwnv0
foreign key (shop_id)
references shop (id);
如果您只知道FK_iy6c08j4gj1opcg1f3m0iwnv0
,则无法猜测约束与哪些表/列相关。
我不知道有任何工具可以通过给定的约束名称找到相应的列。我总是喜欢自定义供应商特定的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。
我在maven中有一个自己的LiquiBase配置,它创建了临时文件,我称之为自动日志,并包含增量差异(这是通过mvn resources:resources liquibase:diff
获得的自动更改日志)。
我从不直接将自动日志复制/粘贴到变更日志中,相反,我总是查看它,修复那些我不喜欢的东西,并最终将其包含在变更日志中。
我手动进行的这个审查过程会检查几个点,例如FK名称。