使用 JoinColumn 时未生成列 (JPA/Hibernate)
Column not generated when using JoinColumn (JPA/Hibernate)
我有以下实体:
@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 在启动时从实体创建表。这样做时,FLOWELEMENT table.
中缺少列 "MAPPINGNAME"
我也尝试过使用 @PrimaryKeyJoinColumn,这导致列被创建,但尽管变量不是空的。
执行此操作的正确方法是什么(@JoinColumn 或@PrimaryKeyJoinColumn),为什么 Column 不是 created/filled?
感谢 Prerak Tiwari,我刚刚找到了解决方案。
在这种情况下,您根本不使用@PrimaryKeyJoinColumn,只使用@JoinColumn。所有共享的主键字段都必须用 "insertable=false, updateable=false".
标记
我有以下实体:
@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 在启动时从实体创建表。这样做时,FLOWELEMENT table.
中缺少列 "MAPPINGNAME"我也尝试过使用 @PrimaryKeyJoinColumn,这导致列被创建,但尽管变量不是空的。
执行此操作的正确方法是什么(@JoinColumn 或@PrimaryKeyJoinColumn),为什么 Column 不是 created/filled?
感谢 Prerak Tiwari,我刚刚找到了解决方案。 在这种情况下,您根本不使用@PrimaryKeyJoinColumn,只使用@JoinColumn。所有共享的主键字段都必须用 "insertable=false, updateable=false".
标记