没用过oracle,我用的是mysql,主键设置为自增,却是只能使用native,不能用sequence

解决方案 »

  1.   

    我是使用 ANT 来发布系统的。用 xdoclet.modules.hibernate.HibernateDocletTask 来生成 *.hbm.xml 用 org.hibernate.tool.hbm2ddl.SchemaExportTask 来生成 创建表的 SQL 语句我列一下两种情况的对比,供楼主参考一下。这种是使用 native 的。
        /**
         * @hibernate.id 
         *  column="id" 
         *  generator-class="native" 
         *  unsaved-value="null"
         */
        public Long getId() {
            return id;
        }
    这种是使用 sequence 的。
        /**
         * @hibernate.id 
         *  column="id" 
         *  generator-class="sequence" 
         *  unsaved-value="null"
         *  
         * @hibernate.generator-param
         *      name="sequence"
         *      value="app_user_sequence"
         */
        public Long getId() {
            return id;
        }
    在 Mysql 与 PostgreSql 上观察Mysql 使用 native 的时候, 数据类型是自增
    Mysql 不能使用 sequence.
    PostgreSql 使用 native 的时候,数据类型没有特别的变化。
    但是生成出来的SQL ,会有一个 CREATE SEQUENCE hibernate_sequence 的语句。
    也就是说,虽然你使用的是 native, 但是 Hibernate 还是使用 序列号(hibernate_sequence)来完成 这个序号的生成工作。
    PostgreSql 使用 sequence 的时候。
    生成 创建表的 SQL 语句时,就自动生成了 app_user_sequence 这个序列号。 楼主的 Oracle 和 PostgreSql 一样,都是支持序列号的。可以参考参考。