私には2つのクラスがあります:
@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で列名を変更しても、列が作成されません。
それはかなり理解できます-同じフィールドが親クラスに存在します。
しかし、いくつかの理由で、この列を作成する必要があります(そのうちの1つは、UniqueConstraintテーブルに配置する必要があることです)。
1つの解決策を見つけました。クラスBの「otherID」フィールド名を変更します。そうすると、列が正しく作成されます。ただし、このフィールドの名前を変更することは避けたいので、このソリューションを最終的なソリューションとして脅かします。
この列を強制的に作成する他の解決策はありますか?