1

@GeneratedValue() を持つエンティティがあります。いろいろな世代があることを知りました。私の質問は: エンティティの新しいインスタンスを作成するときに ID を生成する生成タイプはありますか? FKとしてIDを持つ別のオブジェクトを作成するには、オブジェクトのIDが必要ですが、他のオブジェクトを作成する前にオブジェクトを永続化したくありません。手伝ってくれてありがとう!

4

2 に答える 2

0

生成された ID の取得について心配する必要はまったくありません。Java 側で (setter メソッドを使用して) オブジェクト関係を設定するだけで、persist()JPA で生成された PK が依存オブジェクトの FK として設定されるようになります。

例を挙げると、次のエンティティ クラスがあるとします。

@Entity
public class PKClass {

    @Id @GeneratedValue
    @Column(name = "PK_ID")
    private Long id;

    // getters/setters
}

@Entity
public class FKClass {

    @Id @GeneratedValue
    @Column(name = "FK_ID")
    private Long id;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "PK_ID")
    private PKClass pk;

    // getters/setters
}

次のように(主キーを気にせずに)それらを永続化します

// create a new transaction
EntityTransaction tx = em.getTransaction();
tx.begin();

// setup Java relationships
PKClass pk = new PKClass();
FKClass fk = new FKClass();
fk.setPK(pk);

// persist
em.persist(fk);

// close transaction
tx.commit();
于 2013-10-15T11:08:53.727 に答える
0

メソッドを呼び出すことができますstore()。Store メソッドは、まだ DB にオブジェクトを永続化していません。休止状態のキャッシュ レイヤーにプロキシ オブジェクトを作成し、そのプロキシ オブジェクトを、主キーが設定された状態で返します (はい、自動生成された値が利用可能です)。必要に応じて、この値を他のオブジェクトに使用できます。完了したら、セッションをフラッシュすると、すべてのオブジェクトが DB に永続化されます。

于 2013-10-15T11:12:35.947 に答える