Hibernate生成索引和MySQL同名的外键

时间:2012-07-12 20:31:41

标签: java mysql hibernate

因此,在我的一个由Hibernate管理的类中,我有以下属性定义:

@ManyToOne(optional = false)
private Company company;

在为MySQL创建db模式时,Hibernate会自动为此字段创建外键和索引:

KEY `FK334B8608339B7FC2` (`company_id`),
CONSTRAINT `FK334B8608339B7FC2` FOREIGN KEY (`company_id`) REFERENCES `companies` (`id`)

如您所见,hibernate对索引(KEY)和外键约束使用相同的名称。这似乎并没有打扰MySQL,但当我尝试使用其他工具(例如mysqldiff)时,它抱怨存在重复的反对(因为FK和索引具有相同的名称)。

这是hibernate的一个错误(它不应该生成两个具有相同名称的不同项),或者是工具有问题,他们错误地认为这些是重复的?

仅供参考:我使用的是Hibernate 3.4.0.GA和MySQL 5.1.44

谢谢!

约翰。

1 个答案:

答案 0 :(得分:2)

根据我的经验,通常hibernate在FK字段上创建一个具有不同名称的外键和索引。我无法理解为什么hibernate会奇怪地生成相同的名称。

您可以使用@ForeignKey(name="")@Index@IndexColumn来更改外键或索引名称。 这样可以避免这种麻烦。

但是,它看起来有bug @OneToOne