Java 使用JoinColumn时未生成列(JPA/Hibernate)
我拥有以下实体:Java 使用JoinColumn时未生成列(JPA/Hibernate),java,hibernate,jpa,primary-key,joincolumn,Java,Hibernate,Jpa,Primary Key,Joincolumn,我拥有以下实体: @Entity @IdClass(IntegrationMappingPK.class) public class IntegrationMapping { @Id @ManyToOne private IntegrationProject project; @Id private String mappingName; ... } @Entity public class MappingElement extends Flow
@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\u ID”、“SCENARIONAME”和“PROJECTNAME”(本质上是IntegrationProject的主键;IFlow有一个由IntegrationProject的主键和名称组成的主键),因此它们是连接在一起的
我让Hibernate在启动时从实体创建表。执行此操作时,FLOWELEMENT表中缺少列“MAPPINGNAME”
我还尝试使用@PrimaryKeyJoinColumn,这会导致创建列,但尽管变量不是空的,但仍然是空的
哪种方法是正确的(@JoinColumn或@PrimaryKeyJoinColumn)以及为什么没有创建/填充列?多亏了Prerak Tiwari,我才找到了解决方案。
在此场景中,您根本不使用@PrimaryKeyJoinColumn,只使用@JoinColumn。所有共享的主键字段都必须标记为“insertable=false,updateable=false”。@PrimaryKeyJoinColumn与联接表策略一起使用,而您使用的是单表策略。请阅读以下内容: