Hibernate中Java对象的三种状态及其转换
来源:互联网 发布:淘宝店主首页寄语 编辑:程序博客网 时间:2024/05/22 14:40
一、打开oracle数据库,登录scott账户,对scott账户进行测试
二、新建一个java项目,导入hibernate配置文件及scott账户下测试表的映射文件
1.创建java项目
2.打开DB Broweser,创建数据库连接
3.在java项目中,先导入hibernate配置文件,再导入hibernate映射文件、映射类
导入hibernate映射文件、映射类
三、测试Hibernate中Java对象的三种状态及其转换
1.主方法
/** * 测试Hibernate中Java对象的三种状态<br/> * 瞬时状态(Transient)<br/> * 持久状态(Persistent)<br/> * 游离状态(Detached)<br/> * * @param args */public static void main(String[] args) {//t1();//java对象从瞬时状态转化为持久状态//t2();//java对象从瞬时状态转化为持久状态,在变为游离状态,对游离态的操作不会影响数据库//t3();//将游离对象使用update()重新关联到session,变为持久态t4();//将对象从持久状态变为瞬时状态,数据库中没有记录与其对应}2.java对象从瞬时状态转化为持久状态
/** * java对象从瞬时状态转化为持久状态 */private static void t1() {//1.加载hibernate配置文件Configuration config = new Configuration().configure();//2.创建sessionFactorySessionFactory sessionFactory = config.buildSessionFactory();//3.打开sessionSession session = sessionFactory.openSession();//4.开启事务Transaction transaction = session.beginTransaction();//5.数据库操作//瞬时状态,数据库中没有记录与其对应Dept d = new Dept();d.setDname("111111");session.save(d);//对象d转换为持久态,数据库中一定有记录与其对应,并且对持久态的操纵就是对数据库的操作d.setDname("222222");//6.提交事务transaction.commit();//7.关闭sessionsession.close();//8.关闭sessionFactorysessionFactory.close();}运行:
查询:
可以看到数据库中新增了一条记录,并且插入的dname的值为222222,不是111111.再看hibernate的提示信息,先查询最大的deptno,再执行插入语句insert,最后执行一个更新语句update。说明new 一个瞬时对象d后,执行session.save()方法后变为持久对象,在通过d.setDname()对其操作,此时操作的就是持久态对象,操作持久态对象就是操作数据库,最终插入的值就是“222222”.
3.java对象从瞬时状态转化为持久状态,在变为游离状态,对游离态的操作不会影响数据库
/** * java对象从瞬时状态转化为持久状态,在变为游离状态,对游离态的操作不会影响数据库 */private static void t2() {//1.加载hibernate配置文件Configuration config = new Configuration().configure();//2.创建sessionFactorySessionFactory sessionFactory = config.buildSessionFactory();//3.打开sessionSession session = sessionFactory.openSession();//4.开启事务Transaction transaction = session.beginTransaction();//5.数据库操作//瞬时状态,数据库中没有记录与其对应Dept d = new Dept();d.setDname("111111");session.save(d);//对象d转换为持久态,数据库中一定有记录与其对应,并且对持久态的操纵就是对数据库的操作d.setDname("222222");//6.提交事务transaction.commit();//7.关闭sessionsession.close();/** * 当session关闭后,持久态对象就会变成游离状态<br/> * 游离状态的特点是数据库可能有也可能没有记录对应<br/> * 对游离对象进行的操作不会影响数据库<br/> */d.setDname("333333");//8.关闭sessionFactorysessionFactory.close();}运行结果:
查询数据库结果:
从查询数据库的结果可以看到,在session关闭后对其进行操作d.setDname("333333"),
数据库中的结果依然是之前的结果,“222222”。
因为session关闭后d对象变为游离态,对游离态操作不会影响数据库。
4.将游离对象使用update()方法重新关联到session,变为持久态对象
/** * 将游离对象使用update()重新关联到session,变为持久态 */private static void t3() {//1.加载hibernate配置文件Configuration config = new Configuration().configure();//2.创建sessionFactorySessionFactory sessionFactory = config.buildSessionFactory();//3.打开sessionSession session = sessionFactory.openSession();//4.开启事务Transaction transaction = session.beginTransaction();//5.数据库操作//瞬时状态,数据库中没有记录与其对应Dept d = new Dept();d.setDname("111111aaaaaa");session.save(d);//对象d转换为持久态,数据库中一定有记录与其对应,并且对持久态的操纵就是对数据库的操作d.setDname("222222bbbbbb");//6.提交事务transaction.commit();//7.关闭sessionsession.close();/** * 当session关闭后,持久态对象就会变成游离状态<br/> * 游离状态的特点是数据库可能有也可能没有记录对应<br/> * 对游离对象进行的操作不会影响数据库<br/> */d.setDname("333333cccccc");//将游离对象使用update()重新关联到session,可以再次变为持久态对象Session s1 = sessionFactory.openSession();Transaction tx = s1.beginTransaction();s1.update(d);tx.commit();//8.关闭sessionFactorysessionFactory.close();}运行结果:
查询数据库的结果:
可以看到,session关闭后操作d.setDname("333333cccccc");重新创建了一个session,执行是s1.update(d);将游离态变为持久态,插入数据“333333cccccc”.
5.将对象从持久状态变为瞬时状态,数据库中没有记录与其对应
/** * 将对象从持久状态变为瞬时状态,数据库中没有记录与其对应 */private static void t4() {//1.加载hibernate配置文件Configuration config = new Configuration().configure();//2.创建sessionFactorySessionFactory sessionFactory = config.buildSessionFactory();//3.打开sessionSession session = sessionFactory.openSession();//4.开启事务Transaction transaction = session.beginTransaction();//5.数据库操作//瞬时状态,数据库中没有记录与其对应Dept d = new Dept();d.setDname("aaaaaa");/** * 执行session的save方法对象从瞬时状态变为持久状态<br/> * 对持久状态的操作就是对数据库的操作 */session.save(d);/** * 执行session的delete方法对象d变为瞬时状态<br/> * 瞬时状态,数据库中没有记录与其对应 */session.delete(d);//6.提交事务transaction.commit();//7.关闭sessionsession.close();/** * 当session关闭后,持久态对象就会变成游离状态<br/> * 游离状态的特点是数据库可能有也可能没有记录对应<br/> * 对游离对象进行的操作不会影响数据库<br/> */d.setDname("cccccc");//将游离对象使用update()重新关联到session,可以再次变为持久态对象Session s1 = sessionFactory.openSession();Transaction tx = s1.beginTransaction();s1.update(d);tx.commit();//8.关闭sessionFactorysessionFactory.close();}运行结果:
查询数据库的结果:
可以看到执行session.delete(d)后,后面的操作都没有插入成功。瞬时对象用update不能变为持久对象。
四、总结
1.hibernate中Java对象的三种状态
2.hibernate中Java对象三种状态之间的转换
- Hibernate中Java对象的三种状态及其转换
- Hibernate中对象的三种状态及其转换
- hibernate对象三种状态及其转换
- Hibernate中Java对象的三种状态以及之间的转换 ----Hibernate_4
- Hibernate中Java对象的三种状态
- hibernate中java对象的三种状态
- hibernate 中java对象的三种状态
- 3.Hibernate中java对象的三种状态
- Hibernate中对象的三种状态
- Hibernate中对象的三种状态
- hibernate中对象的三种状态
- Hibernate中对象的三种状态
- Hibernate中对象的三种状态
- Hibernate中 对象 的三种状态
- hibernate中对象的三种状态
- Hibernate中对象的三种状态
- Hibernate中对象的三种状态
- Hibernate中对象的三种状态
- tc-srm704-div1-500 解题报告
- android-module作为库和主工程里的jar包依赖关系
- 统计显著性
- 异步加载图片错位问题
- GOP/ 码流 /码率 / 比特率 / 帧速率 / 分辨率【转】
- Hibernate中Java对象的三种状态及其转换
- 有没有方法在安装apk时不出现安装界面
- 4-4 链式表的按序号查找 (10分)
- 排序算法(2)、经典算法(7):快速排序算法
- ZCMU-1261-采药
- POJ 1604 Just the Facts JAVA .
- thinkPHP常用数据操作(三)连贯操作
- python学习-1-列表,元组,字典,集合,文件操作
- 关于viewPager+radioGroup+Fragment嵌套,其中一个有listview,数据空白的问题