zoukankan      html  css  js  c++  java
  • hibernate中的session几种状态

      我不喜欢把一些理论当理论来记,那样感觉好无趣,生活应当充满乐趣,学习也应如此。

      首先我将session想成是一个大的容器,这个当然是随便我们怎么想了。而对于session中的几种状态,我喜欢这样来区分,在session中和在session外。刚new出来的对象在session外,经过查询和保存(好多方法了)的对象在session中,经过驱赶方法后的对象在session外。我觉得这样对于我理解执行这些方法时sql语句的产生有很大的帮助。

      下面用几个代码片段来分析一下上面说的。主键的生成策略( <generator class="identity" />)

    //Hibernate: insert into test.person_ (pname, psex) values (?, ?)
    public void save(){ Session session = factory.openSession(); session.getTransaction().begin();
            //在session外 Person person = new Person(); person.setPname("大崔"); person.setPsex("男");    //经过save方法到session中 session.save(person);    //事物提交时刷新到数据库 session.getTransaction().commit(); session.close(); }
    //Hibernate: select person0_.pid as pid0_0_, person0_.pname as pname0_0_, person0_.psex as psex0_0_ from test.person_ person0_ where person0_.pid=?	
    public void save3(){ Session session = factory.openSession(); session.getTransaction().begin();
            //经过查询方法后在session中,且数据库中person的sex属性是“男” Person person = (Person) session.get(Person.class, 5L);
            //在session中修改后还是在session中,且并没有真正的修改sex属性 person.setPsex("男");
            //因此此时的update不会执行 session.update(person); session.getTransaction().commit(); session.close(); }
    //Hibernate: select person0_.pid as pid0_0_, person0_.pname as pname0_0_, person0_.psex as psex0_0_ from test.person_ person0_ where person0_.pid=?
    //Hibernate: update test.person_ set pname=?, psex=? where pid=?
    public void save6(){ Session session = factory.openSession(); session.getTransaction().begin();
        //经过查询方法后在session中,且数据库中person的sex属性是“男” Person person = (Person) session.get(Person.class, 5L);
        //在session中修改后还是在session中,且此时真正的修改sex属性(相对于session中的person) person.setPsex("女");
        //所以此时会执行update方法 session.update(person); session.getTransaction().commit(); session.close(); }
    	public void update3(){ 
    		Session session = factory.openSession();
    		session.getTransaction().begin();
    		Person person = new Person();
    		person.setPid(1L);
    		//此时session中并没有person,因此对于每一个需要跟新的person,session都会认为是新的,因此会每次都执行update方法
    		session.update(person);
    		
    		session.getTransaction().commit();
    		session.close();
    	}
    
  • 相关阅读:
    Spring 结合 Hibernate 配置 C3P0
    servlet直接调用spring的serivce方法
    http协议 web开发的应用 笔记
    一个让微软晕倒的中国人,绝对经典
    经典的上课插嘴
    教授说接吻
    在狼身上值得我们学习的十大处世哲学(经典)
    结婚前的暴强对话
    小笑话
    非一般的分手信
  • 原文地址:https://www.cnblogs.com/Jc-zhu/p/4527155.html
Copyright © 2011-2022 走看看