java 状态对象
package cn.itcast.hibernate.sh.state; import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import cn.itcast.hibernate.sh.domain.Person;
import cn.itcast.hibernate.sh.utils.HiberanteUtils; public class StateTest extends HiberanteUtils{
/**
* session.save方法把一个临时状态的对象转化成持久化状态的对象
*/
@Test
public void testSavePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
person.setPname("afds");
person.setPsex("af");
session.save(person);
transaction.commit();
session.close();
} /**
* session.update方法可以把一个对象的状态变成持久化状态
*/
@Test
public void testUpdate(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person2 = new Person();//临时状态
person2.setPid(1L);//临时状态
session.update(person2);//持久化状态
transaction.commit();
session.close();
} /**
* 当session.get方法得到一个对象的时候,是不需要再执行 update语句,因为已经是持久化状态
* 当一个对象是一个持久化对象的时候,当进行提交的时候,hibernate内部会让该对象和快照进行对比,如果一样,则不发出update语句
* 如果不一样,则发出update语句
*/
@Test
public void testGet(){
Session session = sessionFactory.openSession();
//Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 1L);//持久化
person.setPname("tt");
//session.update(person);
//transaction.commit();
session.close();
} /**
* session.clear方法把所有的对象从session中清空
*/
@Test
public void testClear(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 1L);
person.setPname("asd");
session.clear();//把session中所有的对象清空
session.update(person);//把对象从脱管状态转化成持久化状态
transaction.commit();
session.close();
} /**
* session.evict把一个对象从session中清空
*/
@Test
public void testEvict(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 1L);
person.setPname("asdsss");
session.evict(person);//脱管状态
session.update(person);//把对象的状态转化成持久化状态
transaction.commit();
session.close();
} /**
* 一个对象是否是持久化对象是针对某一个session而言的
*/
@Test
public void testSession(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 1L);
person.setPname("asfd");
transaction.commit();
session.close();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
person.setPname("aaaaaaa");//person对象对于94的session来说是一个临时状态的对象
//session.update(person);
transaction.commit();
session.close();
} /**
* 当执行transaction.commit的时候,hibernate内部会检查session
* 1、如果一个对象为临时状态的对象,则session不会管
* 2、如果一个对象是持久化状态的对象,如果有ID值,并且和数据库对应,那么先把该对象与快照进行对比,如果一致,则什么都不做,如果不一致,则发出update语句
* 3、如果一个对象是持久化状态的对象,如果没有ID值,则会发出save语句
*/
@Test
public void testMuplyOption(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
person.setPname("rrr");
person.setPsex("asdfasdf"); Person person3 = new Person();
person3.setPname("rrr");
person3.setPsex("asdfasdf"); session.save(person);
Person person2 = (Person)session.get(Person.class, 1L);
person2.setPname("afds45");
transaction.commit();
session.close();
} @Test
public void testMutiplyOption2(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
person.setPname("asdfads");
person.setPsex("er");
session.save(person);
transaction.commit();
session.evict(person);
session.close(); session = sessionFactory.openSession();
transaction = session.beginTransaction();
session.update(person);
session.clear();
transaction.commit();
session.close();
}
}

java 状态对象的更多相关文章
- Java 有状态和无状态对象的区别
无状态会话Bean 无状态就是对于一次操作,不能保存数据.无状态对象(Stateless Bean)是没有实例变量的对象,不能保存数据,是不变类,是线程安全的.例如: public class ...
- java 之 对象与垃圾回收
1.垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源) 2.程序无法精确控制垃圾回收的运行,垃圾回收会在合适的时候运行.当对象永久的失去引用后,系统会在合适的时 ...
- 支持状态对象复用的RPC框架——SnakeRPC
SnakeRPC是我2年前(春节期间!)做的一个RPC框架,现与大家分享. 设计SnakeRPC的主要动机是,Hessian返回的状态对象(如:数据库连接对象.文件对象等)无法复用,而且它对Strea ...
- Java 序列化 对象序列化和反序列化
Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...
- Java Object 对象拷贝答疑
Java Object 对象拷贝答疑 @author ixenos 摘要:在对象的clone过程需要注意的几点.关于关键字this.super 关于clone[对象拷贝] 在实际编程过程,有时候我们会 ...
- Java开发知识之Java面相对象
Java开发知识之Java面相对象上 一丶什么是面相对象 了解什么什么是面相对象.那么首先要了解什么是面相过程. 面相过程的意思就是. 什么事情都亲力亲为. 比如上一讲的排序算法. 我们自己写的. 这 ...
- Java核心技术 对象与类
对象与对象变量: 要想使用对象,就必须首先构造对象,并指定其初始状态,然后,对对象应用方法. 在Java中,使用构造器构造新实例.构造器是一种特殊的方法,用来构造并初始化对象. 在实际开发中,通常需要 ...
- Java 状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模 ...
- 深入理解多线程(三)—— Java的对象头
上一篇文章中我们从HotSpot的源码入手,介绍了Java的对象模型.这一篇文章在上一篇文章的基础上再来介绍一下Java的对象头.主要介绍一下对象头的作用,结构以及他和锁的关系. Java对象模型回顾 ...
随机推荐
- AGC 012 C - Tautonym Puzzle
题面在这里! 神仙构造啊qwqwq. 窝一开始只想到一个字符串长度是 O(log(N)^2) 的做法:可以发现一段相同的长度为n的字符串的贡献是 2^(n-1)-1 ,可以把它看成类二进制,枚举用了多 ...
- 初识Ant-Design
设计价值观 Ant-Design在设计方面,存在两个大的价值观,自然和确定.自然即顺其自然,在顺应用户的自我感知和行为方式来开发更自然的产品.确定即探索设计规律,并将其抽象成对象,减少设计者的主观干扰 ...
- javascript字符串与数组练习
<html> <head> </head> <body> <script type="text/javascript"> ...
- iOS中深拷贝、浅拷贝和retain的区别
浅拷贝:浅拷贝是对object对象的指针拷贝,让指针指向同一块内存地址,“对象永远只有一个",浅拷贝使对象的引用计数器+1.代码如下: 可以看出不可变字符串的指针指向了同一地址,并没有重新开 ...
- 判断IE版本的HTML语句详解,如:<!--[if IE 9]> 仅IE9可识别 <![endif]-->
我们常常会在网页的HTML里面看到形如[if lte IE 9]……[endif]的代码,表示的是限定某些浏览器版本才能执行的语句,那么这些判断语句的规则是什么呢?请看下文: 注意:以下用法不支持IE ...
- [典型漏洞分享]YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出【高危】
YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出[高危] 问题描述: YS VTM模块开放对外监听端口(8554和8664),此次使用sulley fuzzing框架对监听在8664端口 ...
- Android Logcat Security(转)
讲解了在Android开发中logcat使用不当导致的安全问题 原帖地址:http://drops.wooyun.org/tips/3812 0x00 科普 development version : ...
- thinkphp去重统计数据sql
DISTINCT 方法用于返回唯一不同的值 官方文档给出的示例: $Model->distinct(true)->field('userName')->select(); 解析的SQ ...
- CSS margin-top 属性
1.margin-top 属性设置元素的上外边距. 注意:允许使用负值. 2.html 文件 <html> <head> <style type="text/c ...
- 关于Android架构那些事
刚开始,因为业务比较赶,我们也没有进行比较好的顶层设计,对代码的要求也是最低要求——完成功能开发就行了.这种短期设计也就造成了我们代码的扩展性几乎为零,稍微添加一点新功能,都要大动干戈.在后台系统架构 ...