Java Hibernate schemaupdate生成重复的外键

Java Hibernate schemaupdate生成重复的外键,java,hibernate,Java,Hibernate,我正在尝试将hibernate 4.2.0升级到4.3.6,但是schemaupdate任务失败,因为它生成了同名的重复外键。以前版本的hibernate似乎也生成了重复的外键,但我没有注意到,因为它们有不同的名称 问题在于以下(简化的)类 @实体 公共阶级关系 { @多通(可选=假) 私人家长; } @实体 @继承(策略=InheritanceType.SINGLE_表) 公共类父类 { } @实体 @鉴别器值(“子”) 公共类子级扩展父级 { @OneToMany(mappedBy=“家长”

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

问题在于以下(简化的)类

@实体
公共阶级关系
{
@多通(可选=假)
私人家长;
}
@实体
@继承(策略=InheritanceType.SINGLE_表)
公共类父类
{
}
@实体
@鉴别器值(“子”)
公共类子级扩展父级
{
@OneToMany(mappedBy=“家长”)
私有列表关系
}
schemaupdate任务从关系到父级以及从子级到关系生成外键。但它不承认这是同一个外键

我已经想出了三种可能的解决办法,但我希望有更好的办法

  • targetEntity:将targetEntity=Child.class添加到关系类,但Relation.class不知道子类。若要修复此问题,将创建循环依赖关系
  • xml:我可以在orm.xml中定义targetEntity,这将起作用
  • 两个关系之一的org.hibernate.annotations.ForeignKey(name=“none”)。这将防止生成一个外键。但这将对使用同一类的其他项目产生影响。此外,不推荐使用hibernate版本的注释,并且 javax.persistence one不能与mapped by一起使用
有更好的方法吗

@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
}