2009-05-20 11 views
3

Id列設定可能なIは、MySQLを使用して、次のエンティティ持っている:しかしJPA:両方の自動および手動

class MyEntity { 
    @Id 
    @GeneratedValue(strategy=IDENTITY) 
    @Column(name="id") 
    private Integer id; 
} 

を、私はまだ手動でIDを設定できるようにしたいと思います!

問題は、INSERTはID列を挿入しないことです。 このやったときに、例えば、:

INSERT INTO myEntities (col1, col2, col3) VALUES (?, ?, ?) 
SELECT id, col1, col2, col3 FROM myEntities WHERE (id = 15) 

こうしてidがまだEntityNotFoundExceptionで自動生成され、refresh()意志 結果になります。

MyEntity e = new MyEntity(); 
e.setId(15); 
em.persist(e); 
em.flush(); 
em.refresh(e); 

を次のクエリが行われます。

@GeneratedValueを設定しないと、この場合はOK、 が有効になりますが、値が自動生成されるとLAST_INSERT_ID()は呼び出されません。

MySQLのようにid列を手動でも でも自動的に設定することは可能ですか?

答えて

0

、手動で割り当てるIDが表に基づく配列決定および配列オブジェクトの配列決定のために動作しなく同一性を有するであろう。

2

JPAはこのシナリオに対応していません(JDOもそうではありません)。あなた自身がidを設定するか、提供されたジェネレータを使って生成することを前提としています。 DataNucleusには、拡張子が @Extension(key = "strategy-when-notnull"、value = "true") を追加して、 "id"値を設定しなかったときに値を生成し、あなたはそれを提供しました。他の実装でも同様のことが可能でしょうか?

--Andy(DataNucleusの)のE​​clipseLinkで

+0

ありがとうございました。 JPA 2でこれを変更する予定があるかどうか知っていますか? –

関連する問題