我的模型中有多个实体,但其中一些实体共享相同的属性,即 Student
。我创建了一个像这样的抽象类。
@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;}
}
这就像一个魅力。看到其中 95% 已映射到我的 MySQL 表中的 C01
列。
我使用这个抽象类来扩展我的每个模型并共享相同的属性。
public class Teammate extends StudentImpl
在某些类中出现问题,Student 属性映射到表中的不同列名
示例
create table myTable
(
c02 int(11) NOT NULL, //student entity is mapped to c02 column instead of c01
)
正如您所看到的,它们的 c01 和 c02 不匹配,并且它们的列 c01 列映射到一个简单的 String
而不是 Student。
我已经尝试过
@javax.persistence.AttributeOverride(name="student",column=@Column(name="c02"))
希望 Hibernate 能够理解学生属性映射到该实体中的 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
}
但似乎不起作用,因为它抛出
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Column 'C01' specified twice.
当我尝试插入新的 AnotherClass 注册表时,会出现此问题。
我做错了什么?难道就不能实现了吗?
已解决
感谢@ddalton,我找到了解决方案。我用过这个,效果很好:
@javax.persistence.AssociationOverride(name="student",joinColumns=@JoinColumn(name="c02"))
最佳答案
您可以使用 AssociationOverride 注释来完成此操作:
关于Java Hibernate Hierachy子类中不同的JoinColumn Column 'C01'指定了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30770140/