JavaWeb_(Hibernate框架)Hibernate中对象的三种状态
对象的三种状态
瞬时状态:
实体 没有id.没有与session关联
持久化状态:
特点:持久化状态对象的任何改变都会同步到数据库中
游离态【也称作托管态】:
实体 有id,没有与session关联
Hibernate向数据库中增加用户调用addUser()方法时
//增加用户
public void addUser() { //得到配置信息
Configuration config = new Configuration().configure();
//创建sessionFactiory对象
SessionFactory sessionFactory = config.buildSessionFactory();
//获取session
Session session = sessionFactory.openSession();
//打开事务
Transaction transcation = session.beginTransaction(); User user = new User(); // =>没有id, 没有与session关联 瞬时状态
user.setName("Gary"); //=>没有id, 没有与session关联 瞬时状态 //存储user对象
session.save(user); //有id,与session关联 持久化状态 //提交事务
transcation.commit();
//关闭资源
session.close(); //没有与session关联,有id }
package com.Gary.dao; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration; import com.Gary.domain.User; public class UserDao { //增加用户
public void addUser() { //得到配置信息
Configuration config = new Configuration().configure();
//创建sessionFactiory对象
SessionFactory sessionFactory = config.buildSessionFactory();
//获取session
Session session = sessionFactory.openSession();
//打开事务
Transaction transcation = session.beginTransaction(); //存储user对象save 只是为了生成id
//有id,与session有关联,持久化状态
User user = new User(); // =>没有id, 没有与session关联 瞬时状态
user.setName("Gary"); //=>没有id, 没有与session关联 瞬时状态 //存储user对象
session.save(user); //有id,与session关联 持久化状态 本质:对象状态的转换
//将瞬时->持久 目的:生成id System.out.println(user.getId()); System.out.println("////////////////////////////////////////"); //提交事务
transcation.commit();
//关闭资源
session.close(); //没有与session关联,有id } //删除用户
public void deleteUser()
{
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();
Transaction transcation = session.beginTransaction();
//得到id为d03de4eb-e033-41c1-9da0-c9f155713e18的对象
User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
session.delete(user);
transcation.commit();
session.close();
} //修改用户
public void ChangeUser()
{
//读取hibernate.cfg.xml
Configuration config = new Configuration().configure();
//获取sessionFactory工厂
SessionFactory factory = config.buildSessionFactory();
//获取session
Session session = factory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//根据id,得到session
User user = session.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
//修改名字,将对象改名为lGary
user.setUsername("lGary");
//更新数据库中的值
session.update(user);
//提交事务
transaction.commit();
//关闭session
session.close();
} //查询用户
public void findUser()
{
Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session openSession = factory.openSession();
Transaction transaction = openSession.beginTransaction();
User user = openSession.get(User.class, "d03de4eb-e033-41c1-9da0-c9f155713e18");
System.out.println(user);
transaction.commit();
openSession.close();
} }
UserDao.java
对象经历了三种状态的改变
//存储user对象save 只是为了生成id
User user = new User(); // =>没有id, 没有与session关联 瞬时状态
user.setName("Gary"); //=>没有id, 没有与session关联 瞬时状态
//存储user对象
session.save(user); //有id,与session关联 持久化状态 本质:对象状态的转换
//将瞬时->持久 目的:生成id
瞬时态指New 新建的一个对象,没有放在Session时,也没有存储在数据库中。
持久态,指这个对象存储在数据库中,并且存在于Session会话中。
而游离态指的是,这个对象存储在数据库中,但已经不存在于Session会话中。

对象三种状态的转变


JavaWeb_(Hibernate框架)Hibernate中对象的三种状态的更多相关文章
- Hibernate中对象的三种状态及相互转化
1. 瞬时状态 (Transient) 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,如下: Customer customer=new Customer(“ ...
- Java中对象的三种状态
Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究. 状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可达状态. 状态二:可复活态:从根节点开 ...
- Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别
首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...
- Hibernate中对象的三种状态即save(),update(),saveOrUpdate()的使用【转】
当new一个user的时候,是处于瞬时状态 当调用session.save(user)的时候,user对象会放到session里,此时处于持久状态 当提交事务的时候,user对象才会存到DB中 当调用 ...
- Hibernate中对象的三个状态解析
Hibernate 将操作的对象分为三种状态: 1. 瞬时 (Transient )/临时状态/自由状态 持久 (Persistent) 脱管 (Detached) 瞬时对象特征: 第一.不处于 Se ...
- hibernate操纵数据库常用方法 及 hibernate对象的三种状态
在dao层使用hibernate语言来与数据库进行访问,hibernate作为面向对象思想开发的dao层框架其理解也需要以面向对象的思想来看待 使用.hibernate不仅支持使用者使用他提供的对象来 ...
- hibernate 实体对象的三种状态以及转换关系。
最新的Hibernate文档中为Hibernate对象定义了四种状态(原来是三种状态,面试的时候基本上问的也是三种状态),分别是:瞬时态(new, or transient).持久态(managed, ...
- java:Hibernate框架1(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态,增删查改)
1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件 准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cf ...
- Hibernate 系列 07 - Hibernate中Java对象的三种状态
引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...
随机推荐
- hdu 4632区间dp 回文字串计数问题
Palindrome subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65535 K (Java/ ...
- C# Reflection exception Method not found
C# Reflection exception Method not found Ok I figured it out. The server has Microsft .NET 4.0 insta ...
- JS基础_相等运算符
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- fork 代码进阶
fork进阶知识 先看一份代码: [cpp] view plain copy /* * fork_test.c * version 2 * Created on: 2010-5-29 * ...
- vue-cli 3.0不能用module.exports为undefined,导致第三方js都没有办法引用
新的 vue-cli 默认禁止了 commonjs 语法可以添加 babel 插件解决 yarn add @babel/plugin-transform-modules-commonjs -D 或 n ...
- 函数缓存 (Function caching)
函数返回值缓存是优化一个函数的常用手段.我们可以将函数.输入参数.返回值全部保存起来,当下次以同样的参数调用这个函数时,直接使用存储的结果作为返回(不需要重新计算). 函数缓存允许我们将一个函数对于给 ...
- MySQL计算两个日期相差的天数、月数、年数
MySQL自带的日期函数TIMESTAMPDIFF计算两个日期相差的秒数.分钟数.小时数.天数.周数.季度数.月数.年数,当前日期增加或者减少一天.一周等等. SELECT TIMESTAMPDIFF ...
- 【异常】Caused by: org.apache.phoenix.coprocessor.HashJoinCacheNotFoundException:
1 详细异常 Caused by: org.apache.phoenix.coprocessor.HashJoinCacheNotFoundException: ERROR 900 (HJ01): H ...
- Mysql(四)-1:单表查询
一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...
- MySQL单表查询实例
数据表准备 ```mysql create table emp( id int not null unique auto_increment, name varchar(20) not null, ...