我有一個實體在Oracle模式中持久化。在DB插入中,觸發器通過使用DB序列來生成實體ID。使用觸發器是強制性的,因爲它還更新對於傳統組件重要的ID生成序列(日誌表類型)旁邊的另一個表。Oracle之前插入觸發器和Hibernate ID生成器設置
如何在我的實體映射中配置Hibernate ID生成器?
尋找類似的問題#1的時候,我找到了一些解決方案,不適合我的情況:
- 直接使用順序:
<generator class="sequence">...</generator>
。這是不可能的,因爲其餘觸發代碼不會被執行 - 使用
<generator class="select">...</generator>
這意味着在插入後,Hibernate使用另一個唯一屬性(根據Hibernate-3.3手冊5.1.4.6)選擇實體。這在這裏也是不可能的,因爲沒有其他獨特的列,並且不支持使用一組屬性。 - 在撥打
save()
之前使用<generator class="assigned">...</generator>
並設置假ID。此ID將被DB觸發器忽略,並且生成的DB行將具有正確的ID。但是,我的Java實例不會有這個解決方案,因爲它對觸發器的實現做出了假設。
是否有解決此問題的好方法?
什麼是標識符?它返回插入的標識號 – Firo 2012-02-08 16:21:18
某些東西聽起來如果與該數據庫觸發器有關,應該只寫入一個序列值,如果沒有在插入中提供,例如'IF:new .pk_id IS NULL然後選擇my_seq.NEXTVAL INTO:new.pk_id FROM DUAL; END IF;' - 然後觸發器的其餘部分可以使用ID,無論它是由觸發器還是由Hibernate提供。 – 2012-02-10 06:32:09
好吧,對不起已經回答了這個問題: @Firo:「身份」不支持Oracle(http://www.roseindia.net/hibernate/hibernateidgenera torelement.shtml) – rainer198 2012-07-09 15:30:22