我的模型中有几个实体,但其中一些共享相同的属性,即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%都Map到了MySQL表中的C01
列。
我使用这个抽象类扩展了我的每个模型,共享相同的属性。
public class Teammate extends StudentImpl
问题出现在某些类中,Student属性Map到表中的不同列名
示例
create table myTable
(
c02 int(11) NOT NULL, //student entity is mapped to c02 column instead of c01
)
正如您所看到的,它们不匹配c 01和c 02,并且它们的列c 01列Map到一个简单的String
,而不是Student。
我试过了
@javax.persistence.AttributeOverride(name="student",column=@Column(name="c02"))
希望Hibernate能够理解student属性Map到此实体中的列c 02。
@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"))
1条答案
按热度按时间qco9c6ql1#
您可以使用AssociationOverride注解来完成此操作:
http://www.objectdb.com/api/java/jpa/AssociationOverrides