我有一個應用程序有一個Oracle數據庫,其中每個表都有一個觸發器調用序列來獲取該行的下一個ID。如何配置我的域以便Hibernate沒有在插入中指定下一個ID並讓Oracle和觸發器處理它?Oracle讓Oracle觸發序列而不是Hibernate?
以前我有我的域設置使用序列發生器,這似乎工作。我不能在我們的生產系統上使用它,因爲DBA不會允許我將選擇特權授予Grails序列。這顯然破壞了Hibernate的生成器。
我有一個應用程序有一個Oracle數據庫,其中每個表都有一個觸發器調用序列來獲取該行的下一個ID。如何配置我的域以便Hibernate沒有在插入中指定下一個ID並讓Oracle和觸發器處理它?Oracle讓Oracle觸發序列而不是Hibernate?
以前我有我的域設置使用序列發生器,這似乎工作。我不能在我們的生產系統上使用它,因爲DBA不會允許我將選擇特權授予Grails序列。這顯然破壞了Hibernate的生成器。
有此休眠論壇的主題,討論了使用generatedKeys
從JDBC插入檢索id
一個自定義的生成:https://forum.hibernate.org/viewtopic.php?t=973262
如果自定義生成器爲你工作,你應該可以通過能夠使用它:
static mapping = {
id generator:"jpl.hibernate.util.TriggerAssignedIdentityGenerator"
}
你不能,也有使用序列支持數據庫和自動編號支持數據庫時,以下情況:
序列的支持
自動編號支持
事實上Oracle的驅動程序的問題不支持步2.2,所以Hibernate無法檢索最後分配的ID(因此它可以將其設置爲實體的ID)。
我會提到使用Hi-Lo密鑰生成器要好得多,因爲hibernate對數據庫的查詢要少一些。 – 2012-02-22 21:05:49
這看起來像它會做的伎倆,謝謝。 – thomj 2012-02-22 22:33:06