Java Hibernate Hierachy Child类中的不同JoinColumn列'C01'指定了两次

时间:2015-06-11 01:36:07

标签: java mysql hibernate

我的模型中有几个实体,但有些属性共享一个属性,(define (shape=? shape1 shape2) (or (and (triangle? shape1) (triangle? shape2)) (and (rectangle? shape1) (rectangle? shape2)))) 我创建了一个这样的抽象类。

Student

这就像一个sharm,看看它们中的95%已经映射到MySQL表中的@javax.persistence.MappedSuperclass public abstract class StudentImpl { private Student student; @ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="c01") public Student getStudent(){return student;} @Override public void setStudent(final Student student){this.student=student;return;} } 列。

我使用这个抽象类扩展了我的每个模型,共享相同的属性。

C01

问题出现在某些类中,Student属性映射到其表中的不同列名

实施例

public class Teammate extends StudentImpl

正如您所看到的那样,它们与c01和c02不匹配,并且它们的列c01列被映射到一个简单的create table myTable ( c02 int(11) NOT NULL, //student entity is mapped to c02 column instead of c01 ) 而不是一个学生。

我试过

String

希望Hibernate能够理解学生属性被映射到此实体中的列c02。

@javax.persistence.AttributeOverride(name="student",column=@Column(name="c02"))

但似乎无法正常工作,因为它会抛出

@javax.persistence.AttributeOverride(name="student",column=@Column(name="c02"))
public class AnotherClass extends StudentImpl
{
    private String c01;
    private String getC01(){return this.c01;} //Column c01 is mapped to a String 
}

当我尝试插入新的AnotherClass注册表时会出现此问题。

为什么我做错了是不可能完成它我要求的很多。

非常感谢委内瑞拉的最佳问候。

更新 解决了我已经找到解决方案感谢@ddalton我使用了这个,这是有效的

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Column 'C01' specified twice.

1 个答案:

答案 0 :(得分:2)

您可以使用AssociationOverride注释来完成此任务:

http://www.objectdb.com/api/java/jpa/AssociationOverrides