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会话中。

  

  

对象三种状态的转变

  

 

原文地址:https://www.cnblogs.com/1138720556Gary/p/11849609.html

时间: 2024-08-03 11:14:14

JavaWeb_(Hibernate框架)Hibernate中对象的三种状态的相关文章

Java中对象的三种状态

Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究. 状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可达状态. 状态二:可复活态:从根节点开始,无论如何都不能访问到这个对象,也就是说这个对象的所有引用都被释放,没有任何变量引用该对象了, 但是该对象有可能在finalize()方法中再次被引用,从而复活. 状态三:不可触及态:对象的所有引用都被释放了,并且在对象的finalize()方法中没有复活,这样的话该对象就是不可触及状态. 对于状

Hibernate中对象的三种状态,以及三种状态间的转化方法

在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来被别人问到了,说是面试题,才发现它是重要的.对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化. Hibernate三种状态之一:临时状态(Transient):也叫瞬时状态,在一个对象刚被创建的时候,比如People people = new People(),它没有持久化,并没有处于Session的缓存中,这种状态的对象叫就是临时对象: Hiberna

Hibernate中对象的三种状态

一  . 在hibernate中,对象有三种状态:临 时状态(Transient).持久状态(Persistent)和游离状态(Detached). 处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject). 1. 临时状态 由 new命令开辟内存空间的Java对象,例如: User user=new User(); 临 时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系. (a) 如 果没有变量对该对象进行

hibernate中对象的三种状态:Transient、Persistent和Detached

1 public class ThreeState { 2 public static void main(String[] args) { 3 User u = new User(); //属性:id(对应数据库递增字段),name,age 4 u.setName("cbirdq"); 5 u.setAge(20); 6 //堆内存有u,session缓存没有u,数据库没有u,没有id 7 8 Session session = sessionFactory.getCurrentSe

Hibernate中对象的三个状态解析

Hibernate 将操作的对象分为三种状态: 1. 瞬时 (Transient )/临时状态/自由状态 持久 (Persistent) 脱管 (Detached) 瞬时对象特征: 第一.不处于 Session 的缓存中,也可以说,不被任何一个 Session 实例关联. 第二.在数据库中没有对应的记录. 持久化对象特征: 第一.持久化对象总是被一个 session 关联. 第二.持久化对象与数据库中的记录对应. 第三.Session清理缓存的时候,会根据持久化对象的改变,更新数据库. 托管对象

Hibernate对象的三种状态

hibernate中对象的状态有三种:临时态(Transient).持久态(Persistent)和游离态(Detached),三种状态转化的方法都是通过session来调用的,处于三种状态下的对象所具有的特点,总结如下: 临时态:没有被session管理 在数据库中没有与之匹配的记录; 持久态:纳入session管理 在数据库中有与之匹配的记录 当属性发生变化,在清理缓存时(脏数据检查)会自动和数据库同步; 游离态:没有被session管理 在数据库中存在与之匹配的记录. 临时态到持久态的方法

java:Hibernate框架(环境搭建,Hibernate.cfg.xml中属性含义,Hibernate常用API对象,HibernteUitl,对象生命周期图,数据对象的三种状态)

1.环境搭建: 三个准备+7个步骤 准备1:新建项目并添加hibernate依赖的jar文件  准备2:在classpath下(src目录下)新建hibernate的配置文件:hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configurati

Hibernate 入门 04 - Hibernate中Java对象的三种状态

目录:(后续不断更新...) Hibernate 入门 01 - 框架技术 (介绍Hibernate框架的发展由来) Hibernate 入门 02 - Hibernate介绍及其环境搭建 Hibernate 入门 03 - 使用Hibernate完成持久化操作 Hibernate 入门 04 - Hibernate中Java对象的三种状态 ▁▃▅ Hibernate中Java对象的三种状态▅▃▁ 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久

关于hibernate中对象的三种状态分析

一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load():持久态到瞬态的方法有delete():游离态到持久态的方法有update().saveOrUpdate().lock():持久态到游离态的方法有:session.close().session.evict().session.clear(). 二,Hibernate的状态 hibernate的