2013-06-12 25 views
1

在休眠模式下,當sequence用作插入生成策略時,它首先向數據庫查詢序列中的下一個值,然後將其設置在實體中。之後,這個實體被保存在數據庫中。所以總結兩個查詢是執行的。在Oracle中使用序列生成Hibernate ID - 單次訪問數據庫

流量:

  • 休眠獲取序列的下一個值
  • 休眠設置你的實體的獲取價值ID
  • Hibernate持久化的實體,它的ID被查詢設定

查詢:

select CUSTOM_SEQUENCE.nextval from dual

然後在insert語句中使用這個值。

問:

反正是有,我們可能會產生像休眠INSERT INTO foobar (foo_id, foo) VALUES (FOOBAR_SEQUENCE.nextval, 'bar');查詢?

回答

2

作爲一種替代方法,您可以使用Hibernate seqhilo generator,這將避免往返於數據庫,因爲它需要一個更大的序列並在內部處理ID。

+0

hi/lo策略在羣集環境中還是在數據庫表可以同時由多個應用程序更新的情況下是安全的? – D3V

+1

是的,因爲Hibernate是Oracle的保留序列範圍。 – gma

+0

根據您的答案和hibernate文檔,Hilo會避免往返DB。有沒有什麼辦法可以在數據庫端使用查詢來生成id,就像我在問題中提到的一樣,這會使數據庫端的大部分工作留在數據庫端,我認爲db可以非常有效地處理數據庫端。 儘管我可以使用hilo,但是像https://hibernate.atlassian.net/browse/HHH-3608 – D3V

相關問題