hibernate的id生成策略

欢迎转载,请注明出处http://www.cnblogs.com/shizhongtao/p/3436523.html

一、xml配置方式的id生成

<id name="id" >
  <generator class="native"></generator>
</id>

其中class常用的值有四个,native、 identity、 sequence、 uuid。

注:其中native和uuid不局限与数据库。如果用oracle的话。使用native,就会在数据库中使用sequence来自动生成id;在mysql中。会设置id auto_increatment(代表id自动增长)

  “uuid.hex” :  由   Hibernate   基于128   位   UUID   算法   生成16   进制数值(编码后以长度32   的字符串表示)作为主键。
 “uuid.string” :  与uuid.hex   类似,只是生成的主键未进行编码(长度16),不能应用在   PostgreSQL   数据库中。

二、注解(anotation)方式

  • auto方式在主键id上标注,@GeneratedValue
     (@GeneratedValue(strategy=GenerationType.AUTO))
    
          默认:对 MySQL,使用auto_increment
          对 Oracle使用hibernate_sequence(名称固定)
  • 使用IDENTITY(@GeneratedValue(strategy=GenerationType.IDENTITY)
    使用于sql server,mysql数据库中,oracle不适用
  •  SEQUENCE(@GeneratedValue(strategy=GenerationType.SEQUENCE))(在oracle中使用)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "teacherSEQ")
    public class Teacher
    {
        private int id;
        private String name;
        @SequenceGenerator(name="teacherSEQ", sequenceName="teacherSEQ_DB") 
        public int getId()
        {
            return id;
        }
        public void setId(int id)
        {
            this.id = id;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
    }
  • 使用uuid方式,和上面的sequence的方式类似
        @Id
        @GenericGenerator(name = "system-uuid", strategy = "uuid.hex")
        @GeneratedValue(generator = "system-uuid")   
        public String getId() {
            return id;
        }

     

  • 使用table方式,待续……

 

 三、联合主键

posted @ 2013-11-21 22:31  bingyulei  阅读(363)  评论(0编辑  收藏  举报