popcorn丫

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

主键生成采用uuid的方式生成,在实体类中该主键的类型必须为String类型。

 

hibernate xml配置文件的方式

实体类:Student.java:

package com.bxw.entity;

public class Student {
    private String id;
    private String name;
    private String sex;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    
}

配置文件Student.hbm.xml默认路径和Student类在同一个包。

<?xml version="1.0" encoding='UTF-8'?>  
  
<!DOCTYPE hibernate-mapping PUBLIC   
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping package="com.bxw.entity">  
   <class name="Student">  
      <id name="id">
          <generator class="uuid"></generator>
      </id> 
      <property name="name"></property>  
      <property name="sex"></property>  
   </class>
</hibernate-mapping>  

测试

package com.bxw.test;

import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.bxw.entity.Student;

public class StudentTest{
    private static Session session = null;

    @BeforeClass
    public static void getSession(){
        try {
            Configuration conf = new Configuration();
            conf.configure();
            session = conf.buildSessionFactory().openSession();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Test
    public void hibernateIdTest() {
        Student ss = new Student();
        ss.setName("Han meimei");
        ss.setSex("女");
        
        session.beginTransaction();
        session.save(ss);
        session.getTransaction().commit();
    }
    
    @AfterClass
    public static void over(){
        session.close();
    }
}

 

====================分割线=======================

注解方式生成主键:

package com.bxw.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

@Entity
public class Teacher {
    private String id;
    private String title;
    private String sex;
    
    @Id
    @GenericGenerator(name="system-uuid",strategy="uuid")
    @GeneratedValue(generator="system-uuid")
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    
}

=====================分割线======================

自定义主键生成方式:

创建自定义生成主键类(本文以时间“年月日时分秒”为格式生成):

package com.bxw.common;

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.AbstractUUIDGenerator;

public class KeyUUID extends AbstractUUIDGenerator{

    public Serializable generate(SessionImplementor arg0, Object arg1)
            throws HibernateException {
        String dateStr = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        return dateStr;
    }

}

需要采用此自定义主键生成方式的实体:

package com.bxw.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

import org.hibernate.annotations.GenericGenerator;

@Entity
public class Teacher {
    private String id;
    private String title;
    private String sex;
    
    @Id
    @GenericGenerator(name="custom-uuid",strategy="com.bxw.common.KeyUUID")
    @GeneratedValue(generator="custom-uuid")
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    
}

 =============分界线=============

sequence生成主键

package com.bxw.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;

@Entity
@SequenceGenerator(name="teacherSeq",sequenceName="teacherSeq")
public class Teacher {
    private int id;
    private String title;
    private String sex;
    
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="teacherSeq")
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
    
}
@SequenceGenerator(name="teacherSeq",sequenceName="teacherSeq")
name是该sequence在程序中的名字
sequenceName是该sequence在数据库中的名字

================分割线========================
实体类:
package com.bxw.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.TableGenerator;

@Entity

@TableGenerator(
        name = "Teacher_GEN",
        table = "GENERATOR_TABLE",
        pkColumnName = "pk_key",
     valueColumnName = "pk_value" pkColumnValue
= "teacher", allocationSize = 1 ) public class Teacher { private int id; private String title; private String sex; @Id @GeneratedValue(strategy=GenerationType.TABLE,generator="Teacher_GEN") public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
@TableGenerator(
        name = "Teacher_GEN",
        table = "GENERATOR_TABLE",
        pkColumnName = "pk_key",
     valueColumnName = "pk_value" pkColumnValue = "teacher", allocationSize = 1 )
生成一个主键生成器
name:该生成器的名字;
table:用来存储主键的表;
pkColumnName:第一个字段名;
valueColumnName:第二个字段名;
pkColumnValue:用来表示该条记录是哪个表的主键,是第一个字段的值,第二个字段用来储存主键。
posted on 2017-07-20 23:40  popcorn丫  阅读(184)  评论(0编辑  收藏  举报