Hibernate schemaupdate生成重复的外键

时间:2014-09-19 15:06:10

标签: java hibernate

我尝试将hibernate 4.2.0升级到4.3.6,但schemaupdate任务失败,因为它生成了具有相同名称的重复外键。似乎以前版本的hibernate也生成了重复的外键,但我没有注意到它,因为它们有不同的名称。

问题在于以下(简化)类

@Entity
public class Relation
{
    @ManyToOne(optional = false)
    private Parent parent;
}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Parent
{

}

@Entity
@DiscriminatorValue("child")
public class Child extends Parent
{
    @OneToMany(mappedBy = "parent")
    private List<Relation> relations
}

schemaupdate任务生成一个从父关系到子关系的外键。但它并没有意识到这是同一个外键。

我提出了三种可能的解决方案,但我希望有更好的解决方案。

  • targetEntity:将一个targetEntity = Child.class添加到Relation类中,但Relation.class并不知道Child类。要解决这个问题,就会产生循环依赖。
  • orm.xml:我可以在orm.xml中定义targetEntity,它可以工作。
  • org.hibernate.annotations.ForeignKey(name =&#34; none&#34;)在两个关系之一上。这将防止生成一个外键。但这会对使用同一类的其他项目产生影响。此外,不推荐使用注释的hibernate版本 javax.persistence one不能与map by使用。

有更好的方法吗?

0 个答案:

没有答案