1. 程式人生 > >hibernate處理主鍵自增

hibernate處理主鍵自增

  學過hibernate的都知道hibernate支援n種主鍵生成策略。但有一種比較詭異,就是sequence。眾所周知,oracle 表的主鍵生成策略是沒有自增(identity或者autoIncrement)的,他是通過 sequence 來實現的。而mysql正好與oracle相反,mysql支援自增,恰好不支援 sequence。如果想要在mysql上應用sequence主鍵生成策略那就悲劇了。 
      但是天無絕人之路,問題總是有辦法解決的。hibernate為我們提供了其他的解決辦法。像一般,我們配置sequence的主鍵生成策略是這樣的: 
Xml程式碼  收藏程式碼
  1. <?
    xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping package="com.example.entity">  
  6.     <class name="Foo">  
  7.         <id name="id">
      
  8.             <generator class="sequence"></generator>  
  9.         </id>        
  10.     </class>  
  11. </hibernate-mapping>  

但上面的配置在mysql下是行不通的,如果要適應mysql,需要做將配置改為: 
Xml程式碼  收藏程式碼
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping package="com.example.entity">  
  6.     <class name="Foo">  
  7.        <id name="id">   
  8.             <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator">  
  9.                 <!--初始值,預設是1-->  
  10.                 <param name="initial_value">1000</param>  
  11.                 <!--自增大小,預設是1-->  
  12.                 <param name="increment_siz">1</param>  
  13.                 <!--sequence的名字,預設是"hibernate_sequence"-->  
  14.                 <param name="sequence_name">hibernate_sequence</param>  
  15.             </generator>   
  16.         </id>     
  17.     </class>  
  18. </hibernate-mapping>  

(以上配置是我在hibernate 3.6.1 上完成的)

摘自:bastengao http://bastengao.iteye.com/blog/1105650