2012-07-12 24 views
2

我想使用SequenceGenerator並從序列生成器獲取下一個值。我想避免去數據庫之旅,並依靠sequencegenerator給我一個獨特的價值。此外,我正在使用該值在顯示字段中顯示唯一標識符,而無需保留該對象。從SequenceGenerator獲取下一個值

+0

我們能看到你的代碼? – SomeKittens 2012-07-13 14:53:37

回答

1

如果我們忽略了JPA value generation strategies,SEQUENCE strategy是最適合您的情況。

不同於AUTO和IDENTITY,序列策略一旦一個新的實體對象持久保存生成的自動 值(即之前 提交)。當前面需要主鍵值 時,這可能很有用。若要將數據庫服務器的往返次數爲減至最小,則ID爲 分組。

每個分配中的ID數量由allocationSize屬性指定。

如果您以前需要序列中生成的ID,只需堅持對象並檢索其ID即可。稍後,您可以將其從持久性上下文中刪除。


我不知道爲什麼你需要身份證才能堅持。我認爲從序列發生器獲得價值沒有意義。我不建議你搞亂生成的值,我不建議你爲ID使用手動值。使用開箱即用的功能。

2

要獲得唯一的一個序列值,你可以使用以下命令:

Query q = em.createNativeQuery("select nextval('schema.sequence_name')"); 
return (Long)q.getSingleResult(); 
+1

這不適用於Oracle。 – johnktims 2014-07-03 18:17:48

+0

可能不會。但是對於PostgreSQL,它的工作原理 – romandragan 2014-09-09 07:18:43

+0

我添加了一個我測試過的Oracle變體。 – 2015-08-03 14:19:06

3

它工作在甲骨文:

Query q = em.createNativeQuery("SELECT nombreSecuencia.NEXTVAL FROM DUAL"); 

return (java.math.BigDecimal)q.getSingleResult();