Hibernate学习笔记—Hibernate对象的三种状态
来源:互联网 发布:nginx 参数 编辑:程序博客网 时间:2024/06/05 07:09
一、Hibernate对象的三种状态
- 瞬时对象(transientObjects):由我们自己创建出来,数据库中没有相应的记录,也没有被hibernate的Session管理起来,这样的对象可以被jvm回收的
- 持久化对象(persistentObjects):这个对象在数据库中有相应的记录,这个对象被Sessioon管理起来
- 脱管对象(detachObjects):数据库中有相应的记录,但是没有被Session管理
二、Hibernate对象的三种状态的相互转换
(一)瞬时对象转换为持久化对象
public class TestHibernate { @Test public void test1(){ Session session =HibernateUtils.getSession(); Transaction tx=session.beginTransaction(); try { //创建对象,这时是瞬时对象 User user=new User(); user.setUname("张三"); user.setGender(1); user.setBirthday(new Date()); //发出sql语句,把user对象纳入到session的管理,并且保存到数据库中,这时候是持久状态 session.save(user); //设置持久对象的属性,Session会把修改后的持久对象的属性值和没有修改时的做对比,如果有变化就发出update,没有就不发 //最终数据库里面是先插入“张三”这一条记录,然后再update为“李四” user.setUname("李四"); tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); }finally{ HibernateUtils.closeResource(session); } }}
- 上例中调用session的save()方法,把瞬时对象转换为了持久化对象
- 对持久化对象的修改,如上例的user.setUname(“李四”),最终会影响数据库里面的记录
(二)持久化对象和脱管对象的相互转换
public class TestHibernate { @Test public void test() { Session session = HibernateUtils.getSession(); Transaction tx = session.beginTransaction(); User user = new User(); try { user.setUname("老王"); user.setGender(1); user.setBirthday(new Date()); session.save(user); tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { // Session关闭,那么user由持久化对象变成脱管对象 HibernateUtils.closeSession(session); } Session session1 = HibernateUtils.getSession(); Transaction tx1 = session1.beginTransaction(); try { user.setUname("老李"); // Session1接纳了user,立即把user从脱管对象转换成持久化对象 session1.update(user); tx1.commit(); } catch (Exception e) { e.printStackTrace(); tx1.rollback(); } finally { HibernateUtils.closeSession(session1); } }}
(三)通过get和load和iterator查询出来的对象是持久对象
public class TestHibernate { @Test public void test() { Session session = HibernateUtils.getSession(); Transaction tx = session.beginTransaction(); try { // 通过get方法查询的对象既在Session管理中,在数据库中也有记录所以user是持久对象 User user = (User) session.get(User.class, 1); System.out.println(user); user.setUname("lili"); // 发出update语句,证明是持久对象 tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { HibernateUtils.closeSession(session); } }}
(四)持久和脱管对象转瞬时
public class TestHibernate { @Test public void test() { Session session = HibernateUtils.getSession(); Transaction tx = session.beginTransaction(); try { // 通过get方法查询的对象既在Session管理中,在数据库中也有记录所以user是持久对象 User user = (User) session.get(User.class, 1); System.out.println(user); // session的删除会把数据库中的记录删掉,同时清掉session的user对象 session.delete(user); tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { HibernateUtils.closeSession(session); } }}
上例中通过delete把数据库中的数据删除,而且清掉Session中的对象,那么这个对象就变成瞬时对象
阅读全文
0 0
- Hibernate学习笔记—Hibernate对象的三种状态
- Hibernate学习笔记——Hibernate对象的三种状态
- Hibernate学习笔记(2):对象的三种状态
- Hibernate学习笔记(2)------------Hibernate数据对象的三种状态
- 【hibernate】hibernate 4 (hibernate对象的三种状态)
- Hibernate学习_006_Hibernate对象的三种状态
- Hibernate学习笔记(四)----核心开发接口、对象的三种状态、session常用方法
- Hibernate学习-------对象在Hibernate中的三种状态
- Hibernate的对象的三种状态
- Hibernate的对象的三种状态
- Hibernate的三种对象状态
- hibernate对象的三种状态
- hibernate 实体对象的三种状态
- hibernate对象的三种状态
- Hibernate对象的三种状态
- Hibernate对象的三种状态
- Hibernate对象的三种状态
- Hibernate对象的三种状态
- 开源 java CMS
- 教练,我“只”想学`solidity`
- iOS网络请求错误解决方法
- hdu 1150 二分匹配
- java实现杨辉三角
- Hibernate学习笔记—Hibernate对象的三种状态
- Message深入解析
- Lucene学习笔记(一)-------Lucene基础
- BZOJ 3889: [Usaco2015 Jan]Cow Routing 双键值最短路
- Java的三种代理模式
- 线性代数背景知识
- 100款机器学习数据集
- Sqlnet.ora限制IP登录
- jqueryday02(jQuery基本使用特性 一些设置方法 基本样式设置)