2012-10-18 26 views
0

使用Open JPA 2.0,數據庫是DB2 9.7。我想創建一個實體,其中包括作爲主鍵的ID和自動生成的標識列,創建實體後需要顯示生成的ID。對於這個持久化實體後,我打電話給entity.getId()。 在數據庫中,我看到下面的查詢得到執行創建實體並返回ID

select ID from final table 
    (INSERT INTO WEB.USER (NAME, LOCATION) VALUES (?, ?)) 

是否有任何替代/更好的方法來創建一個實體,並返回生成的ID?我希望避免"Select ID from final table",因爲這可能會對性能產生影響。

+1

你可以試試@TableGenerator。 –

回答

0

我正在使用數據庫序列(@SequenceGenerator)以避免「從最終表中選擇ID」。這工作正常,並@TableGenerator也將排序此問題。

0

這是您從DB2檢索自動生成的ID的方式,您無法對此做任何事情。其他數據庫通常需要額外的SQL查詢,所以對於DB2來說,它甚至更好,因爲它會立即返回ID。我不認爲有這樣的更快的方法。

檢出OPENJPA-736實施此優化的位置。

+0

感謝您的回覆。但是我的DBA對此並不滿意。如果我將Identity列更改爲生成的序列會有幫助嗎?最後一個選項是用這個問題的直接JDBC執行替換JPA。 –

+0

看來你DBA是面向Oracle的。 DB2以這種方式更好,因爲它爲唯一ID提供了序列和自動生成列。你的DBA不滿意的標準是什麼?他分析了這個查詢的訪問計劃嗎?你爲什麼要一個序列?這最後意味着兩次訪問數據庫,這增加了IO和可能的網絡流量。使用其他選項(自動生成),它只是在數據庫中傳輸和處理的一個包。 – AngocA