首页 > 代码库 > java 状态对象

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 }