SSH与SSM学习之hibernate09——对象的三种状态

SSH与SSM学习之hibernate09——对象的三种状态

一、对象的三种状态

hibernate中,对象拥有三种状态:瞬时状态、持久化状态、游离|托管状态。

1.1 瞬时状态

瞬时状态:没有id,没有在session缓存中。

例如下面的user实例就是 瞬时状态

User user = new User();// 瞬时状态。没有id,没有与session 关联
user.setName("xiaoming");// 瞬时状态。没有id,没有与session 关联
user.setAge(19);// 瞬时状态。没有id,没有与session 关联

1.2 持久化状态

持久化状态:有id,在session缓存中。

例如下面的user实例就是 瞬时状态

session.save(user);//持久化状态。有id,与session关联

User user = session.get(User.class,1);// 持久化状态。有id,与session关联

1.3 游离|托管状态

游离|托管状态:有id,没有在session缓存中。

例如下面的user实例就是 瞬时状态

User user = new User();// 瞬时状态。没有id,没有与session 关联
user.setName("xiaoming");// 瞬时状态。没有id,没有与session 关联
user.setAge(19);// 瞬时状态。没有id,没有与session 关联

session.save(user);//持久化状态。有id,与session关联
//--------------------------------------------

//3.提交事务
t.commit();
//4.关闭资源
session.close();//游离|托管状态。有id,没有与session关联

二、持久化状态对象的任何变化都会自动同步到数据库中

例如下面的例子

/*
三种状态特点
 持久化状态特点: 持久化状态对象的任何变化都会自动同步到数据库中.
 */
@Test
public void statusDemo3(){
    //1.获取Session
    Session session = HibernateUtils.openSession();
    //2.开启事务
    Transaction t = session.beginTransaction();

    //-------------------------------------------

    User user = session.get(User.class,1);// 持久化状态。有id,与session关联
    System.out.println("修改name属性前---"+user);

    user.setName("杞文明");//持久化状态。有id,与session关联

    user = session.get(User.class,1);// 持久化状态。有id,与session关联
    System.out.println("修改name属性后---"+user);

    //--------------------------------------------

    //3.提交事务
    t.commit();
    //4.关闭资源
    session.close();//游离|托管状态。有id,没有与session关联
}

打印结果

修改name属性前---User{id=1, name='xiaoming', age=19}
修改name属性后---User{id=1, name='杞文明', age=19}

HibernateUtils.java

package com.qwm.hibernate02;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * @author:qiwenming
 * @date:2017/9/17 0017   2:39
 * @description:
 * Hibernate工具类
 */
public class HibernateUtils {
    private static SessionFactory factory;

    static{
        //1 创建,调用空参构造
        Configuration conf = new Configuration().configure();
        //2 根据配置信息,创建 SessionFactory对象
        factory = conf.buildSessionFactory();
    }

    //获得session => 获得全新session
    public static Session openSession(){
        //3 获得session
        Session session = factory.openSession();

        return session;

    }
    //获得session => 获得与线程绑定的session
    public static Session getCurrentSession(){
        //3 获得session
        Session session = factory.getCurrentSession();

        return session;
    }
}

三、对象的三种状态转换

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值