2012-01-19 4 views
2

データベースがId(@GeneratedValue)を生成する場所を保存する方法を探していて、その値を複合キーの一部である子オブジェクトにカスケードする必要があります。 Parent次のは、我々が持っているとしましょう:JPA/Hibernate親に依存する複合キーを持つ子を保存します。

@Entity 
@Table("CHILD") 
public class Child { 
    private CompositeKey key; 
    private String value; 

    @EmbeddedId 
    public CompositeKey getKey() { 
     return this.key 
    } 

    public void setKey(CompositeKey key) { 
     this.key = key; 
    } 

    // .. basic mapping of value column 

} 

複合キー:子どもと

@Entity 
@Table("PARENT") 
public class Parent { 

    private long id; 
    private List<Child> children; 

    @Id 
    @GeneratedValue 
    @Column(name="...") 
    public long getId() { 
     return this.id 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @OneToMany(mappedBy="key.parent", cascade= { CascadeType.ALL }) 
    public List<Child> getChildren() { 
     return this.children; 
    } 
} 

@Embeddable 
public class CompositeKey key { 
    private String type; 
    private Parent parent; 

    @Column(name="TYPE") 
    public String getType() { 
     return this.type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

    @ManyToOne 
    @JoinColumn("PARENT_ID") // FK in the Child table 
    public Parent getParent() { 
     return this.parent; 
    } 

    public void setParent(Parent parent) { 
     this.parent = parent; 
    } 
} 

は誰もが知っていますが、これは仕事ができるかどこParentのidことができますFKの一部として保存され、CompositeKey

の一部として Childに保存されます210

答えて

0

あなたはこれを解決しましたか?

同じような問題があり、保存されていたものの合成IDを設定しようとしました。

複合キーを持つアイテムが保存される前に@PrePersist注釈を使用してメソッドを実行し、そのメソッドでコンポジットIDを作成/設定します。その時点で参照アイテムIDを持っています。

これはうまくいくようですか?

+0

最後に私のデータベースを修正し、UUIDジェネレータを使って子オブジェクトのキーを設定しました。私は一番上の検索結果をいくつか試しましたが、最終的に私は前に進む必要があると決めました。 – rynmrtn

関連する問題