Hibernate之主键生成策略

摘要:
----˃1617181920学生实体类对应Student.hbm中的名称值。xml一个接一个1packagecom。MavenHubernate。两个实体;23publicclassStudent{45privateIntegersid;6privateStringsname;7publicIntegergetSid(){8returnsid;9}10publicvoidsetSid{11this.sid=sid;12}13publicStringgetSname(){{14returnsname;15}16publicvoidetSname{17this.sname=sname;18}19@Override20publicStringtoString(){21return“学生[sid=“+sid+”,sname=“+sname+”]”;22}23publicStudent{24super();25this.sid=sid;26this.sname=sname;27}28publicStudent(){29super(();30}313233}Worker.hbm.xml1˂?

Hibernate之主键生成策略

1.1 程序员自己控制:assigned

1.2 数据库控制: identity(标识列/自动增长) sequence

1.3 hibernate控制:increment uuid/uuid.hex

1.4 其它:native

hibernate.cfg.xml核心配置文件

Hibernate之主键生成策略第1张

Student.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="com.MavenHibernate.two.entity.Student" table="t_hibernate_student">
 7         <id name="sid" type="java.lang.Integer" column="sid">
 8               <generator class="assigned" /> 
 9             <!-- <generator class="sequence" /> -->
10               <!-- <generator class="increment" />  -->
11              <!-- <generator class="identity" />  -->
12             <!-- <generator class="sequence" /> -->
13             <!-- <generator class="sequence" > <param name="sequence_name">aaa</param> 
14                 </generator> -->
15             <!-- <generator class="com.javaxl.two.id.Myts" /> -->
16         </id>
17         <property name="sname" type="java.lang.String" column="sname">
18         </property>
19     </class>
20 </hibernate-mapping>

Student实体类与Student.hbm.xml中的name值一一对应

 1 package com.MavenHibernate.two.entity;
 2 
 3 public class Student {
 4 
 5     private Integer sid;
 6     private String sname;
 7     public Integer getSid() {
 8         return sid;
 9     }
10     public void setSid(Integer sid) {
11         this.sid = sid;
12     }
13     public String getSname() {
14         return sname;
15     }
16     public void setSname(String sname) {
17         this.sname = sname;
18     }
19     @Override
20     public String toString() {
21         return "Student [sid=" + sid + ", sname=" + sname + "]";
22     }
23     public Student(Integer sid, String sname) {
24         super();
25         this.sid = sid;
26         this.sname = sname;
27     }
28     public Student() {
29         super();
30     }
31     
32     
33 }

Worker.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping>
 6     <class name="com.MavenHibernate.two.entity.Worker" table="t_hibernate_worker">
 7         <id name="wid" type="java.lang.String" column="wid">
 8             <!-- <generator class="assigned" /> -->
 9              <!-- <generator class="uuid" />  -->
10              <generator class="com.MavenHibernate.id.MyTsGenerator" /> 
11             <!-- <generator class="sequence" > <param name="sequence_name">aaa</param> 
12                 </generator> -->
13             <!-- <generator class="com.javaxl.two.id.Myts" /> -->
14         </id>
15 
16         <property name="wname" type="java.lang.String" column="wname">
17         </property>
18     </class>
19 </hibernate-mapping>

Worker.hbm.xml对应的Worker实体类

 1 package com.MavenHibernate.two.entity;
 2 
 3 public class Worker {
 4 
 5     private String wid;
 6     private String wname;
 7     public String getWid() {
 8         return wid;
 9     }
10     public void setWid(String wid) {
11         this.wid = wid;
12     }
13     public String getWname() {
14         return wname;
15     }
16     public void setWname(String wname) {
17         this.wname = wname;
18     }
19     @Override
20     public String toString() {
21         return "Worker [wid=" + wid + ", wname=" + wname + "]";
22     }
23     public Worker(String wid, String wname) {
24         super();
25         this.wid = wid;
26         this.wname = wname;
27     }
28     public Worker() {
29         super();
30     }
31     
32 }

 程序员自己控制:assigned

assigned
数据类型不限、保存前必须赋值

 1 package com.MavenHibernate.dao;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.Transaction;
 5 
 6 import com.MavenHibernate.two.entity.Student;
 7 import com.MavenHibernate.two.entity.Worker;
 8 import com.MavenHibernate.two.util.SessionFactoryUtils;
 9 /**
10  * hibernate中的主键生成策略
11  * 1.人工控制
12  * 2.数据库控制
13  * 3.hibernate控制
14  * 4.自定义主键生成策略
15  * @author Administrator
16  *
17  */
18 public class DemoDao {       
19 
20     /**
21      * 新增学生
22      * @param stu
23      */
24     public void addStudent(Student stu) {
25         Session session = SessionFactoryUtils.openSession();
26         Transaction transaction = session.beginTransaction();
27         session.save(stu);
28         transaction.commit();
29         SessionFactoryUtils.closeSession();
30     }
31     /**
32      * 新增功能
33      * @param worker
34      */
35     public void addWorker(Worker worker) {
36         Session session = SessionFactoryUtils.openSession();
37         Transaction transaction = session.beginTransaction();
38         session.save(worker);
39         transaction.commit();
40         SessionFactoryUtils.closeSession();
41     }
42     
43     public static void testStudent() {
44         DemoDao dao = new DemoDao();
45         Student stu = new Student();
46         stu.setSname("XFQ");
47         stu.setSid(65);
48         dao.addStudent(stu);
49     }
50     
51     
52 }

Hibernate之主键生成策略第2张

Hibernate之主键生成策略第3张

数据库控制: identity(标识列/自动增长) sequence

Student.hbm.xml

Hibernate之主键生成策略第4张

DemoDao 
 1 package com.MavenHibernate.dao;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.Transaction;
 5 
 6 import com.MavenHibernate.two.entity.Student;
 7 import com.MavenHibernate.two.entity.Worker;
 8 import com.MavenHibernate.two.util.SessionFactoryUtils;
 9 /**
10  * hibernate中的主键生成策略
11  * 1.人工控制
12  * 2.数据库控制
13  * 3.hibernate控制
14  * 4.自定义主键生成策略
15  * @author Administrator
16  *
17  */
18 public class DemoDao {       
19 
20     /**
21      * 新增学生
22      * @param stu
23      */
24     public void addStudent(Student stu) {
25         Session session = SessionFactoryUtils.openSession();
26         Transaction transaction = session.beginTransaction();
27         session.save(stu);
28         transaction.commit();
29         SessionFactoryUtils.closeSession();
30     }
31     /**
32      * 新增功能
33      * @param worker
34      */
35     public void addWorker(Worker worker) {
36         Session session = SessionFactoryUtils.openSession();
37         Transaction transaction = session.beginTransaction();
38         session.save(worker);
39         transaction.commit();
40         SessionFactoryUtils.closeSession();
41     }
42     
43     public static void testStudent() {
44         DemoDao dao = new DemoDao();
45         Student stu = new Student();
46         stu.setSname("XFQ");
47         stu.setSid(70);
48         dao.addStudent(stu);
49     }
50     
51 
58 }

Hibernate之主键生成策略第5张

hibernate控制:increment uuid/uuid.hex

是由容器自动生成的一个32位的字符串,.hex代表的是十六进制
32位的字符串,无需赋值,

Worker.hbm.xml

Hibernate之主键生成策略第6张

 1 package com.MavenHibernate.dao;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.Transaction;
 5 
 6 import com.MavenHibernate.two.entity.Student;
 7 import com.MavenHibernate.two.entity.Worker;
 8 import com.MavenHibernate.two.util.SessionFactoryUtils;
 9 /**
10  * hibernate中的主键生成策略
11  * 1.人工控制
12  * 2.数据库控制
13  * 3.hibernate控制
14  * 4.自定义主键生成策略
15  * @author Administrator
16  *
17  */
18 public class DemoDao {       
19 
20     /**
21      * 新增学生
22      * @param stu
23      */
24     public void addStudent(Student stu) {
25         Session session = SessionFactoryUtils.openSession();
26         Transaction transaction = session.beginTransaction();
27         session.save(stu);
28         transaction.commit();
29         SessionFactoryUtils.closeSession();
30     }
31     /**
32      * 新增功能
33      * @param worker
34      */
35     public void addWorker(Worker worker) {
36         Session session = SessionFactoryUtils.openSession();
37         Transaction transaction = session.beginTransaction();
38         session.save(worker);
39         transaction.commit();
40         SessionFactoryUtils.closeSession();
41     }
42     
43     public static void testStudent() {
44         DemoDao dao = new DemoDao();
45         Student stu = new Student();
46         stu.setSname("XFQ");
47         stu.setSid(70);
48         dao.addStudent(stu);
49     }
50     
51     public static void main(String[] args) {
52         DemoDao dao = new DemoDao();
53         Worker worker = new Worker();
54         worker.setWname("肖龙飞");
55         dao.addWorker(worker);
56     }
57     
58 }

Hibernate之主键生成策略第7张

创建主键生成器类
实现org.hibernate.id.IdentifierGenerator接口即可,并还可以实现org.hibernate.id.Configurable接口来读取一些配置信息

MyTsGenerator 
 1 package com.MavenHibernate.id;
 2 
 3 import java.io.Serializable;
 4 import java.text.SimpleDateFormat;
 5 import java.util.Date;
 6 
 7 import org.hibernate.HibernateException;
 8 import org.hibernate.engine.spi.SharedSessionContractImplementor;
 9 import org.hibernate.id.IdentifierGenerator;
10 
11 public class MyTsGenerator implements IdentifierGenerator {
12 
13     @Override
14     public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
15         // TODO Auto-generated method stub
16         SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
17         return "book_order_"+sdf.format(new Date());
18     }
19 
20 }

Worker.hbm.xml

Hibernate之主键生成策略第8张

Hibernate之主键生成策略第9张

免责声明:文章转载自《Hibernate之主键生成策略》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇可能是你见过的最完善的微前端解决方案推荐给科技创业者的六本书下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

3DESC加密算法

3DESC 请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异,java的3des加密采用的是"DESede/CBC/PKCS5Padding"规则,所以对应的C#规则是"PaddingMode.PKCS7和CipherMode.CBC",使用CBC模式的话在C#下必须传入加密...

判断SQLSERVER数据库表字段为空的问题

今天在用遍历dataset所有记录时(把dataset中的字段值读出并赋给各TextBox的Text属性), 读取方法:TextBox3.Text=Convert.ToString(dataSet11.msg_info[a].msg_receiver),a是一变量,利用button_click触发其自增, 用以上方法当读取到一条类型为datatime的空字...

android源码framework下添加新资源的方法

编译带有资源的jar包,需要更改frameworks层,方法如下:   一.增加png类型的图片资源   1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/res/res/drawable-mdpi里。但是要确保没有与原生的没有重名文件。   2.在framework/base/core/res/res/...

关于几种获取iOS设备UDID典型方式的技术探讨

UDID 是由子母和数字组成的 若干个字符串的序号,用来区别每一个唯一的 iOS 设备,包括 iPhones, iPads, 以及 iPod Touches,这些编码看起来是随机的,实际上是跟硬件设备特点相联系的,我们称之为识别码,也叫做UDID( Unique Device Identifier),比如典型的UDID 类似这样: 37f2f993bae6...

netty中的UDP

UDP 提供了向多个接收者发送消息的额外传输模式: 多播——传输到一个预定义的主机组; 广播——传输到网络(或者子网)上的所有主机。 本示例应用程序将通过发送能够被同一个网络中的所有主机所接收的消息来演示 UDP 广播的使用。为此,我们将使用特殊的受限广播地址或者零网络地址 255.255.255.255。 发送到这个地址的消息都将会被定向给本地网络...

C#中的Session

一: 网站开发中,为了保存用户信息我们就会用到session。 Session具有以下特点:(1)Session中的数据保存在服务器端;(2)Session中可以保存任意类型的数据;(2)Session默认的生命周期是20分钟,可以手动设置更长或更短的时间。 我们在aspx页面中的调用一般只需要这么写:<%=session["key"]=value...