簡體   English   中英

使用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和名稱組成的主鍵),因此將它們聯接在一起。

我讓Hibernate在啟動時從實體創建表。 這樣做時,FLOWELEMENT表中缺少“ MAPPINGNAME”列。

我也嘗試過使用@PrimaryKeyJoinColumn,這會導致創建該列,但是該變量不是空的。

哪種方法是正確的方法(@JoinColumn或@PrimaryKeyJoinColumn),為什么不創建/填充列?

感謝Prera​​k Tiwari,我找到了解決方案。 在這種情況下,您根本不會使用@PrimaryKeyJoinColumn,而僅使用@JoinColumn。 所有共享的主鍵字段都必須標記為“ insertable = false,updateable = false”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM