但是天无绝人之路,问题总是有办法解决的。hibernate为我们提供了其他的解决办法。像一般,我们配置sequence的主键生成策略是这样的:
<?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="sequence"></generator> </id> </class> </hibernate-mapping>
但上面的配置在mysql下是行不通的,如果要适应mysql,需要做将配置改为:
<?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 上完成的)