hibernate的持久化类、主键生成策略
一、hibernate的持久化类
1、什么是持久化类:
持久化:将数据存储到关系型数据库。
持久化类:与数据库中的数据表建立了某种关系的java类。(持久化类=javabean+映射配置文件)
2、持久化类的编写规则:
(1)需要提供无参的构造方法。因为在Hibernate底层需要使用反射生成类的实例。
(2)持久化类的属性需要私有,对私有的属性提供公有的get和set方法。
(3)持久化类的属性要尽量使用包装类的类型。包装类的类型予以描述更清晰而基本数据类型不容易描述。
(4)持久化类要有一个唯一标识OID与表的主键对应。(用来区分不同的对象)
(5)持久化类尽量不要使用final修饰。
二、hibernate的主键生成策略(记录录入时主键的生成规则)
1、主键可以区分不同的实体,主键可以分为自然主键和代理主键:
(1)自然主键:是一个实体的其中一条属性,比如:学生的学号,是一个字段同时也是一个主键。
(2)代理主键:就是充当主键的字段不是实体的一个属性,但是它具有主键的功能,可以标识一个实体。例如:设置ID。
2、主键生成策略:
(1)native(hibernate默认):根据所使用的数据库支持能力从identity、sequence等生成策略中选择一种
<id name="studentno" column="studentno">
<generator class="native"></generator>
</id>
public static void testSel() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
Student student=new Student();
student.setSname("zzzz");
student.setSex("男");
student.setBirthday("2019-11-11");
student.setClassno("");
student.setPoint();
student.setPhone("");
student.setEmail("20171514@qq.com");
session.save(student);
transaction.commit();
session.close();
}
主键自增,不需要设置主键的值,主键必须为数字。


(2)increment:
<id name="studentno" column="studentno">
<generator class="increment"></generator>
</id>
public static void testSel() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
Student student=new Student();
student.setSname("zzzz");
student.setSex("男");
student.setBirthday("2019-11-11");
student.setClassno("201911");
student.setPoint(111);
student.setPhone("1873496511");
student.setEmail("20171514@qq.com");
session.save(student);
transaction.commit();
session.close();
}
由hibernate维护,主键自增,每次插入的时候,都会查询当前主键的最大值,加一后作为新的主键值。
存在线程安全问题,只有在没有其他线程的时候才能使用。(一般不用)


(3)sequence:Oracle的主键生成策略。
(4)native(根据底层数据库能力不同来选择identity、sequence、hilo三种生成器中的一种),项目中如果有多种数据库的时候可以使用此方式
(5)uuid(主键的数据类型必须为String,随机生成一个不会重复的字符串):
<id name="studentno" column="studentno">
<generator class="uuid"></generator>
</id>
public static void testSel() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
Student student=new Student();
student.setSname("zzzz");
student.setSex("男");
student.setBirthday("2019-11-11");
student.setClassno("201911");
student.setPoint(111);
student.setPhone("1873496511");
student.setEmail("20171514@qq.com");
session.save(student);
transaction.commit();
session.close();
}


前面的几种都是代理主键生成策略,下面一种为自然主键生成策略。
(6)assigned(为自然主键生成策略,需要指定主键的值,不会自动生成):
<id name="studentno" column="studentno">
<generator class="assigned"></generator>
</id>
public static void testSel() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
Student student=new Student();
student.setStudentno(2000000);
student.setSname("zzzz");
student.setSex("男");
student.setBirthday("2019-11-11");
student.setClassno("201911");
student.setPoint(111);
student.setPhone("1873496511");
student.setEmail("20171514@qq.com");
session.save(student);
transaction.commit();
session.close();
}


(7)identity:主键由数据库自动生成
三、hibernate持久化的三种状态
1、三种状态:
public static void testSel() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
Student student=new Student();//瞬时态
student.setSname("zzzz");//瞬时态
student.setSex("男");//瞬时态
student.setBirthday("2019-11-11");//瞬时态
student.setClassno("201911");//瞬时态
student.setPoint(111);//瞬时态
student.setPhone("1873496511");//瞬时态
student.setEmail("20171514@qq.com");//瞬时态
session.save(student);//持久化状态
transaction.commit();
session.close();//游离状态
}
(1)瞬时态(临时态、自由态)(没有id没有与session关联)
创建出了一个Student对象,此对象和Hibernate没有任何关系。
(2)持久化态(有id,与session有关联),在事务没有提交之前变为持久态
执行了session.save(student);后生成了id值,但是并未执行insert语句
(3)游离(托管)态:有id,没有与session关联(曾经被session管理过)
2、持久化状态的特点:
持久化对象的任何变化都会自动同步到数据库。

hibernate的持久化类、主键生成策略的更多相关文章
- java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...
- Hibernate之:各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- 三 Hibernate持久化状态&主键生成策略
持久化类 持久化:将内存中的一个对象持久化到数据库中的过程 持久化类:Java类+映射文件.Java中一个类与数据库的表建立了映射关系,那么这个类称为持久化类. 持久化类的编写规则: 对持久化类提供一 ...
- Hibernate(4)——主键生成策略、CRUD 基础API区别的总结 和 注解的使用
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: hibernate的主键生成策略 UUID 配置的补充:hbm2ddl.auto属性用法 注解还是配置文件 h ...
- Hibernate框架笔记02_主键生成策略_一级缓存_事务管理
目录 0. 结构图 1. 持久化类的编写规则 1.1 持久化和持久化类 1.2 持久化类的编写规则 2. 主键生成策略 2.1 主键的分类 2.2 主键生成策略 3. 持久化类的三种状态[了解] 3. ...
- hibernate(二)主键生成策略
hibernate主键生成策略主要指的是在实体类orm的配置 <id name=""> <generator class="native"&g ...
- Hibernate的几种主键生成策略
主键类型: 业务主键(natural key):业务主键的值是来源于一个业务数据. 代理主键(surrogate key):代理主键需要采用一种方式来生成某个唯一值. 代理主键的生成策略: 1.hib ...
- Hibernate遇到oracle之主键生成策略
一直用Hibernate+mysql,感觉Hibernate很好用,也出过什么大问题:这周,公司的产品要部署到Orecle,虽然产品号称支持Oracle但是我自己知道,这个产品压根儿就没在Oracle ...
- (二)JPA实体类主键生成策略
在JPA中,配置实体类的主键的生成策略使用 @GeneratedValue @Id @Column(name = "id") @GeneratedValue(strategy = ...
- hibernate框架学习之主键生成策略generator
1)手工控制 assigned(不限制类型) 2)数据库自动生成 uuid(字符串类型) increment(整型数值类型) identity (整型数值类型) sequence (整型数值类型) n ...
随机推荐
- JVM 参数调优配置
在 tomcat 配置文件 tomcat/bin/catalina.sh 中 配置 JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss1024K -XX ...
- eclipse不提示问题
按照上面截图输入26个字母大小写,即可.
- ELK学习笔记之配置logstash消费kafka多个topic并分别生成索引
0x00 filebeat配置多个topic filebeat.prospectors: - input_type: log encoding: GB2312 # fields_under_root: ...
- websocket-shap 函数Broadcast的使用方法
Broadcast:在websocket-shap函数的定义是:向WebSocket服务中的每个客户端发送数据,类似于广播的效果 如果要使用异步发送,可使用BroadcastAsync函数. 在源码中 ...
- 【转载】C#中使用double.TryParse方法将字符串转换为double类型
在C#编程过程中,将字符串string转换为double类型过程中,时常使用double.Parse方法,但double.Parse在无法转换的时候,会抛出程序异常,其实还有个double.TryPa ...
- Vue项目开发相关问题总结
Vue项目开发相关问题总结 一.创建一个项目(两种方式) 1.通过CLI命令行创建,具体步骤如下: (1)Node 版本要求 Vue CLI 需要 Node.js 8.9 或更高版本 (推荐 8.11 ...
- data:image/png;base64应用
原文:https://blog.csdn.net/deng_xj/article/details/93731850 data:image/png;base64应用 我们知道任何图片都可以通过base6 ...
- 如何统一管理单个任务下所有API的同步情况?
1. 一分钟完成单个API配置 单个API的配置包含:API名称.URL地址.请求方式.参数设置.自定义高级设置. 参数允许用户填写:Text.WebService.Timestamp.DependO ...
- android ViewFlipper(翻转视图) 使用
1.布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...
- LCD 驱动 S3C2440A
LCD Control 1 Register 以16BPP为例 LCD Control 2 Register LCD Control 3 Register LCD Control 4 Register ...