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 }

你可能感兴趣的:(java)