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

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

我的模型中有几个实体,但其中一些共享相同的属性,即Student。我创建了一个这样的抽象类。

  1. @javax.persistence.MappedSuperclass
  2. public abstract class StudentImpl
  3. {
  4. private Student student;
  5. @ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="c01")
  6. public Student getStudent(){return student;}
  7. @Override
  8. public void setStudent(final Student student){this.student=student;return;}
  9. }

这工作就像一个魅力。可以看到,其中95%都Map到了MySQL表中的C01列。
我使用这个抽象类扩展了我的每个模型,共享相同的属性。

  1. public class Teammate extends StudentImpl

问题出现在某些类中,Student属性Map到表中的不同列名
示例

  1. create table myTable
  2. (
  3. c02 int(11) NOT NULL, //student entity is mapped to c02 column instead of c01
  4. )

正如您所看到的,它们不匹配c 01和c 02,并且它们的列c 01列Map到一个简单的String,而不是Student。
我试过了

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

希望Hibernate能够理解student属性Map到此实体中的列c 02。

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

但似乎不工作,因为它扔

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

当我尝试插入一个新的AnotherClass注册表时,就会出现这个问题。
我做错了什么?难道不可能实现吗?

已解决

我找到了解决方案,感谢@ddalton。我用了这个,它正在工作:

  1. @javax.persistence.AssociationOverride(name="student",joinColumns=@JoinColumn(name="c02"))

相关问题