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();
}
}

最新文章

  1. UWP控件与DataBind
  2. 浏览器控制台命令调试——console
  3. 兼容IE7音乐播放器之jplayer的使用
  4. C#之Lock
  5. 【spoj8222】Substrings
  6. 转载——用Mixer API函数调节控制面板的音频设置
  7. Demon_动画控制(实现前后左右移动,喊叫)
  8. GetCurrentDirectory、SetCurrentDirectory和GetModuleFileName
  9. android 程序崩溃crash日志的捕捉
  10. android平台短视频技术之 视频编辑的经验分享.
  11. Python 模块之 string.py
  12. 201521145048《Java程序设计》第6周学习总结
  13. [HDU5663]Hillan and the girl
  14. SQL MAX() 函数
  15. leetcode978
  16. php安全篇过滤用户输入的参数(转)
  17. 集合框架基础知识-----java基础知识
  18. poj 2632 Crashing Robots(模拟)
  19. AngularJS2.0起步
  20. Python中小整数对象池和大整数对象池

热门文章

  1. [HDU1532]Drainage Ditches
  2. 【最短路】【spfa】CDOJ1633 去年春恨却来时,落花人独立,微雨燕双飞
  3. 【分块】【LCT】bzoj2002 [Hnoi2010]Bounce 弹飞绵羊
  4. [NOIp2016提高组]天天爱跑步
  5. [转]SSH整合 简单的增删改查
  6. AIM Tech Round (Div. 1) C. Electric Charges 二分
  7. Codeforces Round #342 (Div. 2) E. Frog Fights set 模拟
  8. JNI小试牛刀
  9. PHP温故知新(一)
  10. Eclipse运行Maven的SpringMVC项目Run on Server时出现错误:Error configuring application listener of class org.springframework.web.context.ContextLoaderListener的问题解决