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" (基本的には IntegrationProject の PK です。IFlow には IntegrationProject の PK と Name で構成される主キーがあります) を共有しているため、結合されています。

Hibernate が起動時にエンティティからテーブルを作成するようにしました。その際、列「MAPPINGNAME」が FLOWELEMENT テーブルにありません。

また、 @PrimaryKeyJoinColumn を使用しようとしましたが、その結果、列が作成されましたが、変数はそうではありませんが空です。

これを行う正しい方法 (@JoinColumn または @PrimaryKeyJoinColumn) と、列が作成/入力されないのはなぜですか?

4

1 に答える 1

0

Prera​​k Tiwari のおかげで、解決策が見つかりました。このシナリオでは @PrimaryKeyJoinColumn をまったく使用せず、@JoinColumn のみを使用します。共有されるすべての主キー フィールドは、「挿入可能 = false、更新可能 = false」でマークする必要があります。

于 2015-09-02T08:13:56.803 に答える