我有两个班级:
@Entity
@Table(name="a_table")
@Inheritance(strategy= InheritanceType.JOINED)
@DiscriminatorColumn(name="jdoclass", length=255)
public abstract class A {
@Id
@Column(name="id")
private int id;
@Column(name="other_id")
private int otherID;
public A(){
}
...
}
@Entity
@Table(name="b_table", uniqueConstraints = @UniqueConstraint(columnNames = {"other_id", "different_id"}))
public class B extends A {
@Column(name="other_id")
private int otherID;
@Column(name="different_id")
private int differentID;
public B() {
}
...
}
当EclipseLink创建SQL时,它会忽略B类中的otherID字段,并且不会在该字段的DB中创建列。即使我在B类中更改列名,仍然不会创建列。
这是可以理解的 - 父类中存在相同的字段 但由于某些原因,我真的需要创建这个列(其中一个是我需要将它放在UniqueConstraint表中)。
我找到了一个解决方案:在B类中更改“otherID”字段名称。然后正确创建列。但我想避免更改此字段的名称,我将此解决方案作为最终解决方案。
是否有其他解决方案可以强制创建此列?
答案 0 :(得分:0)
如果您使用InheritanceType.JOINED
,请确保PrimaryKeyJoinColumn
与数据库一致。
确保entity
的表格和columen与database
。
请尝试以下方法;
Person.java
@Entity
@Table(name="PERSON")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "Person_Type")
public abstract class Person {
@Id
@Column(name = "ID")
private int id;
@Column(name = "NAME")
private String name;
public Person() {
}
//getter and setter
}
Student.java
@Entity
@Table(name = "STUDENT")
@PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "ID")
public class Student extends Person {
@Column(name = "ROLE_NO")
private String rollNo;
@Column(name = "COURSE")
private String course;
public Student() {
}
public Student(String name, String rollNo, String course) {
super(name);
this.rollNo = rollNo;
this.course = course;
}
// getter and setter
}