zoukankan      html  css  js  c++  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 }

  • 相关阅读:
    linux下好用软件全记录
    Shell之Here Document
    ThinkPHP判断更新是否成功的正确方法
    memcached单点登录配置
    gedit搭建c开发环境
    两种算法的比较,学习算法的重要性
    解决sendmail发送邮件慢的问题
    直接拿来用,10个PHP代码片段(收藏)
    Nginx 简单的负载均衡配置示例
    Nginx 虚拟主机 VirtualHost 配置
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3772576.html
Copyright © 2011-2022 走看看