java 状态对象


  1 package cn.itcast.hibernate.sh.state;
2
3 import org.hibernate.Session;
4 import org.hibernate.Transaction;
5 import org.junit.Test;
6
7 import cn.itcast.hibernate.sh.domain.Person;
8 import cn.itcast.hibernate.sh.utils.HiberanteUtils;
9
10 public class StateTest extends HiberanteUtils{
11 /**
12 * session.save方法把一个临时状态的对象转化成持久化状态的对象
13 */
14 @Test
15 public void testSavePerson(){
16 Session session = sessionFactory.openSession();
17 Transaction transaction = session.beginTransaction();
18 Person person = new Person();
19 person.setPname("afds");
20 person.setPsex("af");
21 session.save(person);
22 transaction.commit();
23 session.close();
24 }
25
26 /**
27 * session.update方法可以把一个对象的状态变成持久化状态
28 */
29 @Test
30 public void testUpdate(){
31 Session session = sessionFactory.openSession();
32 Transaction transaction = session.beginTransaction();
33 Person person2 = new Person();//临时状态
34 person2.setPid(1L);//临时状态
35 session.update(person2);//持久化状态
36 transaction.commit();
37 session.close();
38 }
39
40 /**
41 * 当session.get方法得到一个对象的时候,是不需要再执行 update语句,因为已经是持久化状态
42 * 当一个对象是一个持久化对象的时候,当进行提交的时候,hibernate内部会让该对象和快照进行对比,如果一样,则不发出update语句
43 * 如果不一样,则发出update语句
44 */
45 @Test
46 public void testGet(){
47 Session session = sessionFactory.openSession();
48 //Transaction transaction = session.beginTransaction();
49 Person person = (Person)session.get(Person.class, 1L);//持久化
50 person.setPname("tt");
51 //session.update(person);
52 //transaction.commit();
53 session.close();
54 }
55
56 /**
57 * session.clear方法把所有的对象从session中清空
58 */
59 @Test
60 public void testClear(){
61 Session session = sessionFactory.openSession();
62 Transaction transaction = session.beginTransaction();
63 Person person = (Person)session.get(Person.class, 1L);
64 person.setPname("asd");
65 session.clear();//把session中所有的对象清空
66 session.update(person);//把对象从脱管状态转化成持久化状态
67 transaction.commit();
68 session.close();
69 }
70
71 /**
72 * session.evict把一个对象从session中清空
73 */
74 @Test
75 public void testEvict(){
76 Session session = sessionFactory.openSession();
77 Transaction transaction = session.beginTransaction();
78 Person person = (Person)session.get(Person.class, 1L);
79 person.setPname("asdsss");
80 session.evict(person);//脱管状态
81 session.update(person);//把对象的状态转化成持久化状态
82 transaction.commit();
83 session.close();
84 }
85
86
87 /**
88 * 一个对象是否是持久化对象是针对某一个session而言的
89 */
90 @Test
91 public void testSession(){
92 Session session = sessionFactory.openSession();
93 Transaction transaction = session.beginTransaction();
94 Person person = (Person)session.get(Person.class, 1L);
95 person.setPname("asfd");
96 transaction.commit();
97 session.close();
98 session = sessionFactory.openSession();
99 transaction = session.beginTransaction();
100 person.setPname("aaaaaaa");//person对象对于94的session来说是一个临时状态的对象
101 //session.update(person);
102 transaction.commit();
103 session.close();
104 }
105
106 /**
107 * 当执行transaction.commit的时候,hibernate内部会检查session
108 * 1、如果一个对象为临时状态的对象,则session不会管
109 * 2、如果一个对象是持久化状态的对象,如果有ID值,并且和数据库对应,那么先把该对象与快照进行对比,如果一致,则什么都不做,如果不一致,则发出update语句
110 * 3、如果一个对象是持久化状态的对象,如果没有ID值,则会发出save语句
111 */
112 @Test
113 public void testMuplyOption(){
114 Session session = sessionFactory.openSession();
115 Transaction transaction = session.beginTransaction();
116 Person person = new Person();
117 person.setPname("rrr");
118 person.setPsex("asdfasdf");
119
120 Person person3 = new Person();
121 person3.setPname("rrr");
122 person3.setPsex("asdfasdf");
123
124
125 session.save(person);
126 Person person2 = (Person)session.get(Person.class, 1L);
127 person2.setPname("afds45");
128 transaction.commit();
129 session.close();
130 }
131
132
133 @Test
134 public void testMutiplyOption2(){
135 Session session = sessionFactory.openSession();
136 Transaction transaction = session.beginTransaction();
137 Person person = new Person();
138 person.setPname("asdfads");
139 person.setPsex("er");
140 session.save(person);
141 transaction.commit();
142 session.evict(person);
143 session.close();
144
145
146 session = sessionFactory.openSession();
147 transaction = session.beginTransaction();
148 session.update(person);
149 session.clear();
150 transaction.commit();
151 session.close();
152 }
153 }

时间: 2024-10-13 16:06:22

java 状态对象的相关文章

Java Object 对象序列化和反序列化

Java Object 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制(深拷贝):在一些分布式应用中,我们还可以把对象的字节流发送到网络上的其他计算机. 反序列化是把流结构的对象恢复为其原有形式 2.Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但

java 之 对象与垃圾回收

1.垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源) 2.程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候运行.当对象永久的失去引用后,系统会在合适的时间回收其占用的内存. 3.在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法. 对象在内存中的状态: 可 达 状 态:当一个对象被创建后,若有一个以上的引用变量引用他,则这个对象在程序中处于可达状态,程序可通过引用变量来调用该对象的实例变量和方法. 可恢复状态:如果程序中某个变量

深入理解多线程(三)—— Java的对象头

上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型.这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头.主要介绍一下对象头的作用,结构以及他和锁的关系. Java对象模型回顾与勘误 在上一篇文章中,关于对象头的部分描述有误,我已经在我博客的文章中就行修正 .这里再重新表述一下. 每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类.当我们在Java代码中,使用new创建一个对象的时候,J

Java实体对象为什么要实现Serializable接口?

前言 Java实体对象为什么一定要实现Serializable接口呢?在学JavaSE的时候有些实体对象不实现Serializable不是也没什么影响吗? 最近在学习mybatis的时候发现,老师写的实体对象都实现了Serializable接口,我查了查网上说是实现Serilizable接口是为了序列化 先来看下Serializable接口 Serializable是java.io包中定义的.用于实现Java类的序列化操作而提供的一个语义级别的接口.Serializable序列化接口没有任何方法

转载---Java集合对象的深度复制与普通复制

原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复制的区别. 1.首先是对Java集合对象得浅复制与深度复制的理解 普通的集合复制只是将内存中栈的地址快拷贝一份,使得一个新的集合对象指向这个地址块,但是集合中的对象变量却是指向堆中的同一块区域.所以当拷贝的集合修改了集合对象内的数据,那么源集合对象也就随之改变了,这样的效果我们称之为Java集合对象

Java Class对象

Java Class对象 @author ixenos 关键字:RTTI.动态绑定.动态加载.获得Class引用.泛型Class引用.newInstance的坑 RTTI和动态绑定 RTTI即运行时类型识别 Run-Time Type Identification 或 Run-Time Type Information 例如,当把Shape对象放入List<Shape>的数组时会向上转型,但在向上转型为Shape的时候也会丢失Shape对象的具体类型,对于数组而言,他们只是Shape对象.从L

如何快速通过json构建java bean对象

和第三方对接的时候,返回给我们的json时参数字段多是很常见的现象,所以我们手动去创建javabean肯定是要花费不少时间,可用通过json自动生成javabean的工具,这里简单的介绍一下Intellij IDEA 中的插件GsonFormat. 1.什么是GsonFormat 将json数据格式转换为java bean对象的as插件. 2.快捷键 Ctrl+ALT+S,或settings -->Plugins -->输入GsonFormat   install plugins 安装完成,重

Java实现对象的序列化

什么是对象的序列化? 序列化:把对象转化成字节序列的过程就是对象的序列化:反序列化:把字节序列转化成对象的过程就是对象的反序列化.单看概念比较抽象,但是看代码就会明白. 对象序列化的用途 1.Java程序在运行中,对象都是分配在内存中,而序列化的一个用途就是将内存的中对象转化成磁盘中的对象. 2.对象不能直接在网络中传输,有时候需要将对象转成字节序列在网络中传输,这就是对象序列化的第二个用途. 如何实现对象的序列化? 1.新建一个实体对象,实现Serializable接口,这个实体对象就可以进行

spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable

1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(value = { "/actor_details" }, method = { RequestMethod.POST }) @ResponseBody public ResultObject actorDetails(@RequestBody ActorDetailsRequest req)