hibernate session.get() 和用sql语句取出来的po进行update

   hibernate,在dao中用session.get() 或者sql语句取出来的po,进行set值时,不用session.update也能保存,我为了证明一下在dao中各种po的取法set的时候都会保存,做了以下的实验:

一、在dao中取数据、存数据

public void sessionGet(){
        Test po = (Test)session.get(Test.class, "1");
        po.setA("111aaa");
    }

 

 public void sqlGet(){
        String sql = "from Test t where t.id=:id";
        Query q = session.createQuery(sql);
        q.setString("id", "2");
        Test po = (Test)q.uniqueResult();
        po.setA("222aaa");
       
        String sql1 = "from Test t where t.id=:id";
        Query q1 = session.createQuery(sql1);
        q1.setString("id", "6");
        List lst = q1.list();
        if(lst != null){
            Test po1 = (Test)lst.get(0);
            po1.setA("666aaa");
        }
    }

 

用以上的方法,全部都保存进去了

 

我又试了一下。将po的取法放在一个方法里,然后另外一个方法去调用,然后进行set,方法如下:

 

public void methodGet(){
        Test po = this.getSqlTest();
        po.setA("4aaa");
        Test po1 = this.getSessionTest();
        po1.setA("5aaa");
    }
   
    Test getSqlTest(){
        String sql = "from Test t where t.id=:id";
        Query q = session.createQuery(sql);
        q.setString("id", "4");
        Test po = (Test)q.uniqueResult();
        return po;
    }
   
    Test getSessionTest(){
        Test po = (Test)session.get(Test.class, "5");
        return po;
    }

 

结果还是保存进去了,结果证明,只要在dao层取出po,然后进行set数据,不用update,数据就会保存进去。

二、从dao中取出数据在service层进行set,从dao中取出数据在action层进行set,

于是我又试了将po从dao层取出来,放到service层去set,没有用update,这时候还是可以保存数据。

而我试了将po从dao层取出来,放到action层去set,没有用update,这时候就保存不了数据了。

这个证明了在同一个事务中set值时不用update也是可以保存数据的。但是非一个事务下进行set时是保存不了数据的。

三、从dao中取出数据经过action层再进入service层进行set,这时候就保存不了数据

 

总结:只要在同一个事务中,不管是dao层还是service层对po进行set数据,不用update,数据就会保存进去。

而不是同一个事务的就无法实现不用update就保存数据的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值