0
我有以下實體:柱
@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」(基本上是PK IntegrationProject; IFlow有一個由IntegrationProject的PK和一個Name組成的主鍵),所以它們被連接起來。
我讓Hibernate在啓動時從實體創建表。這樣做時,FLOWELEMENT表中缺少列「MAPPINGNAME」。
我也嘗試過使用@PrimaryKeyJoinColumn,它會導致正在創建的列,但是儘管這個變量並不是空的。
哪種方法可以做到這一點(@JoinColumn或@PrimaryKeyJoinColumn)以及爲什麼不創建/填充列?
@PrimaryKeyJoinColumn與JOINED表策略一起使用,但您已使用SINGLE表策略。閱讀:https://docs.oracle.com/javaee/5/api/javax/persistence/PrimaryKeyJoinColumn.html –