使用Hibernate自动生成的名称作为约束是个好主意吗



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名称。

相关内容

  • 没有找到相关文章

最新更新