2009-05-20 46 views
3

我使用MySQL和有以下實體:JPA:Id列可設置的自動和手動

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

不過,我仍希望能夠手動設置ID!

問題是INSERT永遠不會插入id列。例如,當 這樣做:

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

下面的查詢將被製作:

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

,因此ID仍然會自動生成和refresh()將 結果EntityNotFoundException

如果我根本沒有設置@GeneratedValue,那麼這種情況下工作正常, 但是當自動生成值時,LAST_INSERT_ID()將不會被調用。

是否有可能自動設置ID列和 ,就像在MySQL中一樣?

回答

0

隨着的EclipseLink,手動分配ID將用於基於表測序和SEQUENCE對象測序工作,但不與IDENTITY。

2

JPA不適合那種情況(也不是JDO);它假設你自己設置ID,或者使用提供的生成器生成它。 DataNucleus有一個擴展,加入 @Extension(key =「when-not-no-strategy」,value =「true」) 當你沒有設置「id」值時,將會生成該值並使用你的值if你提供了它。也許其他實現允許類似的東西?

--Andy(DataNucleus將)

+0

謝謝,很高興知道。你知道是否有計劃在JPA 2中改變這個嗎? – 2009-05-20 12:05:50