您的位置:首页 > 其它

hibernate处理主键自增

2014-09-29 20:54 302 查看
  学过hibernate的都知道hibernate支持n种主键生成策略。但有一种比较诡异,就是sequence。众所周知,oracle 表的主键生成策略是没有自增(identity或者autoIncrement)的,他是通过 sequence 来实现的。而mysql正好与oracle相反,mysql支持自增,恰好不支持
sequence。如果想要在mysql上应用sequence主键生成策略那就悲剧了。 
      但是天无绝人之路,问题总是有办法解决的。hibernate为我们提供了其他的解决办法。像一般,我们配置sequence的主键生成策略是这样的: 

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="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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: