hibernate處理主鍵自增
阿新 • • 發佈:2019-02-10
學過hibernate的都知道hibernate支援n種主鍵生成策略。但有一種比較詭異,就是sequence。眾所周知,oracle 表的主鍵生成策略是沒有自增(identity或者autoIncrement)的,他是通過 sequence 來實現的。而mysql正好與oracle相反,mysql支援自增,恰好不支援
sequence。如果想要在mysql上應用sequence主鍵生成策略那就悲劇了。
但是天無絕人之路,問題總是有辦法解決的。hibernate為我們提供了其他的解決辦法。像一般,我們配置sequence的主鍵生成策略是這樣的:
Xml程式碼
但上面的配置在mysql下是行不通的,如果要適應mysql,需要做將配置改為:
Xml程式碼
但是天無絕人之路,問題總是有辦法解決的。hibernate為我們提供了其他的解決辦法。像一般,我們配置sequence的主鍵生成策略是這樣的:
Xml程式碼
-
<?
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.example.entity">
- <class name="Foo">
-
<id name="id">
- <generator class="sequence"></generator>
- </id>
- </class>
- </hibernate-mapping>
但上面的配置在mysql下是行不通的,如果要適應mysql,需要做將配置改為:
Xml程式碼
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
-
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.example.entity">
- <class name="Foo">
- <id name="id">
- <generator class="org.hibernate.id.enhanced.SequenceStyleGenerator">
- <!--初始值,預設是1-->
- <param name="initial_value">1000</param>
- <!--自增大小,預設是1-->
- <param name="increment_siz">1</param>
- <!--sequence的名字,預設是"hibernate_sequence"-->
- <param name="sequence_name">hibernate_sequence</param>
- </generator>
- </id>
- </class>
- </hibernate-mapping>
(以上配置是我在hibernate 3.6.1 上完成的)
摘自:bastengao http://bastengao.iteye.com/blog/1105650