Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JoinColumn时未生成列(JPA/Hibernate)_Java_Hibernate_Jpa_Primary Key_Joincolumn - Fatal编程技术网

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与联接表策略一起使用,而您使用的是单表策略。请阅读以下内容: