各位大虾好,小弟在这里向你们请教一个关于Hibernate主键自增的问题,情况是这样子的:
     该主键在数据库中的类型是char(4),我想让它用这种格式自增0001,0002...0010...9999。 
     请问有没有什么主键模式可以实现呢?或者有什么比较好的解决方法,请你们帮小弟提供些解决方案。谢谢!

解决方案 »

  1.   

    主键自增是这种形式  1,2,3.....
    那可以写个方法
      public String geNumber(){
         //先到数据库里面查询最大的一条数据   select max(列) from 表面
          //这里假设为  String max;
         if(数据库里面没有){
              return "0001";
         }else{
            long s1 = long.paseLong(max);
            long s2 += s1;
            return 然后根据S2返回的长度来确定前面加几个0;
      }
      

  2.   

    主键为啥要用char型呢??2楼的方法很危险,100%会出现主键重复我推荐用触发器!~~
      

  3.   

    将该主键在数据库中的类型设置为int类型,然后设置为自动增长从0001开始,每次自增1
      

  4.   

    如果是Hibernate的话,可以配置主键的generator啊
    配置成native什么的,让他自增就可以了,或者使用Hibernate Annotation设置成Auto就可以实现id的自增了!
      

  5.   

    可以自定义主键 生成类,然后在配置主键的时候指明主键生成类就可以了,可以做到你想要的任何主键样式,自己百度一下,google一下了。
      

  6.   

    我以前写了一个 发你参考下,首先先创建一张简单的表,插入一条数据
    /*序列号表*/
    create table order_seq(
    seq int 
    );
    insert into order_seq values(0);然后创建一个类继承 TableGenerator 代码如下 注意导包
    import org.hibernate.id.TableGenerator; 以前搞了半天才发现包错了。package com.accp.hibdemo.id.gener;import java.io.Serializable;
    import java.text.SimpleDateFormat;
    import java.util.Date;import org.hibernate.HibernateException;
    import org.hibernate.engine.SessionImplementor;
    import org.hibernate.id.TableGenerator;public class MyIdGenerator extends TableGenerator{ @Override
    public synchronized Serializable generate(SessionImplementor session,
    Object object) throws HibernateException {
    //取到序列号
    Integer seq = (Integer)super.generate(session, object);
    //组合成想要的格式
    Date now = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String result = sdf.format(now);

    if(seq<10){
    result += "000"+seq;
    }else if(seq < 100){
    result += "00"+seq;
    }else if(seq < 1000){
    result += "0"+seq;
    }else{
    result +=  seq;
    }

    return result;
    }
       
    }然后配置hibernate 注意我省略了一张User表,有id,name,pwd字段<class name="com.accp.hibdemo.id.entity.Userinfo05" table="userinfo05" catalog="hib_02">
            <id name="id" type="java.lang.String">
                <column name="id" length="12" />
                <!-- 自定义主键生成 -->
                <generator class="com.accp.hibdemo.id.gener.MyIdGenerator">
                 <param name="table">order_seq</param>
                 <param name="column">seq</param>
                </generator>
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="30" not-null="true" unique="true" />
            </property>
            <property name="pwd" type="java.lang.String">
                <column name="pwd" length="30" not-null="true" />
            </property>
        </class>
      

  7.   

    非常感谢javamylovett     这或许就是我想要的东西,我试试效果怎么样。很感谢大家的意见
      

  8.   

    主键保持唯一即可,如果是纯数字,一般维护你肯定是要在界面上显示,
    你不可能直接在数据库中直接操作,所以你可以设置成普通的自增长,
    到时候在界面上取的时候Format即可,如果非要是这种数字格式,
    那就在存入的时候就进行格式化。