2011-02-22 43 views

回答

5

我使用與Oracle在Hibernate映射文件中的ID,當知道被定義是這樣的:

<id name="id" column="item_id"> 
    <generator class="sequence"> 
     <param name="sequence">NAME_OF_YOUR_SEQUENCE</param> 
    </generator> 
</id> 

您還可以指定generator類爲「原生」,這是方便,如果你再切換到自動遞增RDMS,如MySQL。在MySQL中,序列位將被忽略。

編輯: 只是重新閱讀你的問題。我不認爲hibernate處理非id列上的序列。我看到的一般方法是在表格中添加觸發器,但這不是一個好的解決方案。

+0

我們還可以在屬性中給出序列聲明 – 2015-08-06 07:33:14

0

如果您使用單獨的Oracle序列,Hibernate將首先向數據庫查詢下一個值,然後執行插入操作(除非您使用優化策略獲取其中的一部分)。

您可以通過檢索,通過調整你的Hibernate XML文件包括下列財產分配上輸入的Oracle價值鞏固這兩個執行爲一體:

<property name="hibernateProperties"> 
     <props> 
     ... 
      <prop key="hibernate.jdbc.use_get_generated_keys">true</prop> 
     ... 
     </props> 

並在您的列使用序列身份

 <generator class="sequence-identity"> 
     <param name="sequence">SEQ_NAME</param> 
    </generator> 
相關問題