【hibernate框架】uuid与native生成ID的样例-XML配置
发布时间:2020-12-16 06:29:16 所属栏目:百科 来源:网络整理
导读:native算法生成随机id: native 根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。 native算法指定的字段类型: 用mysql,你需要设置主键bigint,autoincreament (大数,自增) 用oracle,你需要设置主键bigint,sequence 这样才能在hibernate
native算法生成随机id: native package cn.edu.hpu.model; public class Student { private int id; private String name; private int age; 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; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 配置文件Student.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.edu.hpu.model"> <class name="Student" table="stu"> <id name="id"> <!--指定uuid算法来让hibernate自动生成id值放入数据库中--> <generator class="native"></generator> </id> <property name="name"></property> <property name="age"></property> </class> </hibernate-mapping> hibernate.cfg.xml中加: <mapping resource="cn/edu/hpu/model/Student.hbm.xml"/> 测试类: package cn.edu.hpu.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import cn.edu.hpu.model.Student; public class StudentTest { public static void main(String[] args) { Student s=new Student(); s.setId(12); s.setName("s1"); s.setAge(1); Configuration cfg=new Configuration(); SessionFactory sf=cfg.configure().buildSessionFactory(); Session session=sf.openSession();//得到session session.beginTransaction(); session.save(s); session.getTransaction().commit(); session.close(); sf.close(); } } 运行测试类后,控制台打出sql语句: Hibernate: insert into stu (name,age,id) values (?,?,?) 数据库生成数据 生成的id:1(如果再加数据,ID自增为2) 原理: native根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个: 1.identity 对 DB2,MySQL,MS SQL Server,Sybase 和 HypersonicSQL 的内置标识字段提供支持。返回的标识符是 long,short 或者 int 类型的。 2.sequence 在 DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence), 而在 Interbase 中使用生成器(generator)。返回的标识符是 long,short 或者 int 类型的。 3.hilo 使用一个高/低位算法高效的生成 long,short 或者 int 类型的标识符。给定一个表和字段(默认分别是 hibernate_unique_key 和 next_hi)作为高位值的来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。
uuid算法生成随机id: uuid算法指定的字段类型必须是String类型。 package cn.edu.hpu.model; public class Student { private String id; private String name; private int age; 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } } 配置文件Student.hbm.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.edu.hpu.model"> <class name="Student" table="stu"> <id name="id"> <!--指定uuid算法来让hibernate自动生成id值放入数据库中--> <generator class="uuid"></generator> </id> <property name="name"></property> <property name="age"></property> </class> </hibernate-mapping> hibernate.cfg.xml中加: <mapping resource="cn/edu/hpu/model/Student.hbm.xml"/> 测试类: package cn.edu.hpu.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import cn.edu.hpu.model.Student; public class StudentTest { public static void main(String[] args) { Student s=new Student(); s.setId("10"); s.setName("s1"); s.setAge(1); Configuration cfg=new Configuration(); SessionFactory sf=cfg.configure().buildSessionFactory(); Session session=sf.openSession();//得到session session.beginTransaction(); session.save(s); session.getTransaction().commit(); session.close(); sf.close(); } } 运行测试类后,控制台打出sql语句: Hibernate: insert into stu (name,?) 数据库生成数据 生成的id:402881eb4a0f542a014a0f542ae10000 这就是uuid算法生成的id值,里面包含:IP 地址、JVM 的启动时间(精确到 1/4 秒)、系统时间和一个计数器值(在 JVM 中唯一)。
转载请注明出处:http://blog.csdn.net/acmman (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |