0

次のタイプのマッピングを機能させようとしています

Table event has the following columns:
id (PK)
prodgroup
errandtype

table errandtype : errandtype

table prodgroup: prodgroup

対応するJPAクラスがあります

@Entity
@Table(name="event")
public class MyEvent {
    @Id
    int id;

    // what mapping should go here?
    Prodgroup prodgroup;

    // what mapping should go here?
    ErrandType errandtype;
} 

@Entity
public class Prodgroup {
    @Id
    private String prodgroup;
}

@Entity
public class ErrandType {
    @Id
    private String errandtype;
}

わかりましたので、質問はコード内でコメントとしてマークされていますが、とにかく明示的にしようと思います。

上記の例では、 MyEvent クラスの Prodgroup および ErrandType フィールドを、対応する Prodgroup および Errandtype インスタンスに設定します。

私は@joincolumnsとmappedby属性を使って@OneToOne関係を試しましたが、それを機能させることができず、論理的なアプローチの感覚をすべて失いました。JPA エンティティ マッピングに対する私の理解は明らかに弱いものです。

それで、誰かが明確にすることができますか?

4

2 に答える 2

3

そのはず:

@Entity
@Table(name="event")
public class MyEvent {
    @Id
    int id;

    // what mapping should go here?
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "prodgroup_id", insertable = true, updatable = true)
    Prodgroup prodgroup;

    // what mapping should go here?
    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "errandtype_id", insertable = true, updatable = true)
    ErrandType errandtype;
} 

@Entity
public class Prodgroup {
    @Id
    private String prodgroup;
}

@Entity
public class ErrandType {
    @Id
    private String errandtype;
}

FetchType Eager は、オブジェクトが常に読み込まれることを意味します (指定されていない場合、デフォルトでは "Lazy" になります)。
CascadeType.ALL は、リンクされたテーブルに対しても merege/persist/remove が実行されることを意味します。

セバスチャン

于 2012-10-24T13:48:01.067 に答える
1

テーブルの列event.prodgroupevent.errandtypeは、それぞれのテーブル (prodgroup、errandtype) への外部キーです。そのため、 @ManyToOne関連付けが必要です(多くのイベントが 1 つの prodgroup または errantype を共有する可能性があるため)。

于 2012-10-24T13:47:58.030 に答える