次のエンティティがあります。
@Entity
@IdClass(IntegrationMappingPK.class)
public class IntegrationMapping {
@Id
@ManyToOne
private IntegrationProject project;
@Id
private String mappingName;
...
}
@Entity
public class MappingElement extends FlowElement {
@ManyToOne(cascade=CascadeType.PERSIST)
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="DISCOVERY_ID", referencedColumnName="DISCOVERY_ID"),
@PrimaryKeyJoinColumn(name="SCENARIONAME", referencedColumnName="SCENARIONAME"),
@PrimaryKeyJoinColumn(name="PROJECTNAME", referencedColumnName="PROJECTNAME"),
})
@JoinColumn(name="MAPPINGNAME", referencedColumnName="MAPPINGNAME")
private IntegrationMapping mapping;
...
}
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@IdClass(FlowElementPK.class)
public class FlowElement {
@Id
@ManyToOne
protected IFlow flow;
@Id
@Basic
protected String name;
@Id
@GeneratedValue
private int id;
...
}
IntegrationMapping と FlowElement は、主キー フィールド "DISCOVERY_ID"、"SCENARIONAME"、および "PROJECTNAME" (基本的には IntegrationProject の PK です。IFlow には IntegrationProject の PK と Name で構成される主キーがあります) を共有しているため、結合されています。
Hibernate が起動時にエンティティからテーブルを作成するようにしました。その際、列「MAPPINGNAME」が FLOWELEMENT テーブルにありません。
また、 @PrimaryKeyJoinColumn を使用しようとしましたが、その結果、列が作成されましたが、変数はそうではありませんが空です。
これを行う正しい方法 (@JoinColumn または @PrimaryKeyJoinColumn) と、列が作成/入力されないのはなぜですか?