mysql Java Hibernate Hierachy Different JoinColumn in Child class Column“C01”指定了两次

krcsximq  于 2023-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(107)

我的模型中有几个实体,但其中一些共享相同的属性,即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"))

相关问题