0

我有两节课:

@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”字段名称。然后正确创建列。但我想避免更改此字段的名称,并威胁将此解决方案作为最终解决方案。

是否有其他解决方案可以强制创建此列?

4

1 回答 1

0

如果您使用InheritanceType.JOINED确保PrimaryKeyJoinColumn与数据库。确保 with 的表和entitydatabase。尝试如下;

人.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
    }

学生.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
    }
于 2012-09-26T13:54:56.333 回答