2012-01-07 9 views
1

を挿入した後の反射IDエンティティクラスに反映されて生成されたが、バージョンプロパティ取得していませんそれでもエンティティクラスには反映されません。バージョンプロパティは、Iを使用する場合<strong>em.persist()</strong>エンティティクラスの新しいインスタンスを挿入するための新しいインスタンス

私はGlassFish 3.1.1を使用しています。

部分エンティティクラスコード

@Id 
@GeneratedValue 
private Long id; 

@Version 
private Long version; 

public void create(Item item) { 

    System.out.println("Before Creating " + item.id + ", " + item.version); 
    entityManager.persist(item); 
    System.out.println("After Creating " + item.id + ", " + item.version); 
} 

が持続文の後()ディスプレイitem.idがを示しているが、私はチェックするとitem.versionは、たとえヌル示しますデータベースはです。

このようになっているのですか、バグですか?

+0

[JPA @バージョン動作](http://stackoverflow.com/questions/5258585/jpa-version-behaviour) – Lion

+0

@Lion:ありがとうございました –

答えて

3

persist()エンティティをデータベースに挿入しません。 persist()が呼び出された後にIDが割り当てられることさえ保証されていません。

一時的なエンティティをエンティティマネージャにアタッチすることは、永続化することです。フラッシュ時に、バージョンが割り当てられます。

トランザクションがコミットされる前に本当に新しいバージョンが必要な場合は、flush()を明示的に呼び出してから新しいバージョンを入手してください。しかし、通常はバージョンフィールドを自分で処理する必要がないため、トランザクションをコミットするだけで済むので、フラッシュが実行され、バージョンが割り当てられます。

+0

ごめんなさい!全く別の話題に巻き込まれた! はい、あなたは正しいです。私がid/versionをコミットする前に必要な場合は、回避策があれば不思議です。 ありがとうございました。 –

+0

回避策は私の答えです:明示的にフラッシュを呼び出します。 –

関連する問題