JavaWeb_(Hibernate框架)Hibernate中对象的三种状态

Posted Cynical丶Gary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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框架学习笔记5:缓存

Hibernate Validator简介

JavaWeb学习之Hibernate框架

Hibernate笔记

JAVAWEB开发之Hibernate详解——Hibernate的框架概述开发流程CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate简介