关于org.hibernate.session的一些体会

代码如下:

BaseHibernateDAO类


ContractedBlock.gif ExpandedBlockStart.gif Code
  1package com.test.DAO.impl;
  2
  3import java.io.Serializable;
  4import java.util.List;
  5
  6import org.hibernate.Session;
  7import org.hibernate.Transaction;
  8import org.hibernate.criterion.Example;
  9
 10import com.test.factory.HibernateSessionFactory;
 11
 12ExpandedBlockStart.gifContractedBlock.gifpublic abstract class BaseHibernateDAO {
 13    private Session session = null;
 14ExpandedSubBlockStart.gifContractedSubBlock.gif    protected Object get(Class clz,Serializable id){
 15        getSession();
 16        Object ret = null;
 17ExpandedSubBlockStart.gifContractedSubBlock.gif        try{
 18            ret = session.get(clz, id);
 19ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(Exception e){
 20            e.printStackTrace();
 21            System.out.println("In BaseHibernateDAO function get");
 22ExpandedSubBlockStart.gifContractedSubBlock.gif        }
finally{
 23            closeSession();
 24        }

 25        return ret;
 26    }

 27ExpandedSubBlockStart.gifContractedSubBlock.gif    protected void add(Object item){
 28        getSession();
 29        Transaction tc = null;
 30ExpandedSubBlockStart.gifContractedSubBlock.gif        try{
 31            tc = session.beginTransaction();
 32            session.save(item);
 33            tc.commit();
 34ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(Exception e){
 35ExpandedSubBlockStart.gifContractedSubBlock.gif            if(null!=tc){
 36                tc.rollback();
 37            }

 38            e.printStackTrace();
 39            System.out.println("In BaseHibernateDAO function add");
 40ExpandedSubBlockStart.gifContractedSubBlock.gif        }
finally{
 41            closeSession();
 42        }

 43    }

 44ExpandedSubBlockStart.gifContractedSubBlock.gif    protected void update(Object item){
 45        getSession();
 46        Transaction tc = null;
 47ExpandedSubBlockStart.gifContractedSubBlock.gif        try{
 48            tc = session.beginTransaction();
 49            session.update(item);
 50            tc.commit();
 51ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(Exception e){
 52ExpandedSubBlockStart.gifContractedSubBlock.gif            if(null!=tc){
 53                tc.rollback();
 54            }

 55            e.printStackTrace();
 56            System.out.println("In BaseHibernateDAO function update");
 57ExpandedSubBlockStart.gifContractedSubBlock.gif        }
finally{
 58            closeSession();
 59        }

 60    }

 61ExpandedSubBlockStart.gifContractedSubBlock.gif    protected void delete(Class clz,Serializable id){
 62
 63        getSession();
 64        Transaction tc = null;       
 65ExpandedSubBlockStart.gifContractedSubBlock.gif        try{
 66            tc = session.beginTransaction();
 67            session.delete(this.get(clz,id));
 68            tc.commit();
 69ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(Exception e){
 70ExpandedSubBlockStart.gifContractedSubBlock.gif            if(null!=tc){
 71                tc.rollback();
 72            }

 73            e.printStackTrace();
 74            System.out.println("In BaseHibernateDAO function delete");
 75ExpandedSubBlockStart.gifContractedSubBlock.gif        }
finally{
 76            closeSession();
 77        }

 78    }

 79ExpandedSubBlockStart.gifContractedSubBlock.gif    protected List search(Class clz,Object condition){
 80        List results = null;
 81ExpandedSubBlockStart.gifContractedSubBlock.gif        try{
 82            results = getSession()
 83                    .createCriteria(clz)
 84                    .add(Example.create(condition))
 85                    .list();
 86ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(Exception e){
 87            e.printStackTrace();
 88            System.out.println("In BaseHibernateDAO function search");
 89ExpandedSubBlockStart.gifContractedSubBlock.gif        }
finally{
 90            closeSession();
 91        }

 92        return results;
 93    }

 94ExpandedSubBlockStart.gifContractedSubBlock.gif    protected Session getSession(){
 95        session = HibernateSessionFactory.getSession();
 96        return session;
 97    }

 98ExpandedSubBlockStart.gifContractedSubBlock.gif    protected void closeSession(){
 99        session = null;
100        HibernateSessionFactory.getSession().close();
101    }

102}

DoubleTest类


ContractedBlock.gif ExpandedBlockStart.gif Code
 1package com.test.main;
 2
 3import com.test.DAO.impl.BaseHibernateDAO;
 4import com.test.entity.Avenue;
 5import com.test.entity.District;
 6
 7ExpandedBlockStart.gifContractedBlock.gifpublic class DoubleTest extends BaseHibernateDAO {
 8
 9ExpandedSubBlockStart.gifContractedSubBlock.gif    /** *//**
10     * @param args
11     */

12ExpandedSubBlockStart.gifContractedSubBlock.gif    public static void main(String[] args) {
13        // TODO Auto-generated method stub
14        new DoubleTest().TestDelAvenue();
15    }

16ExpandedSubBlockStart.gifContractedSubBlock.gif    public void TestAddDistrict(){
17        District district = new District();
18        district.setDname("徐汇");
19        super.add(district);
20    }

21ExpandedSubBlockStart.gifContractedSubBlock.gif    public void TestAddAvenues(){
22        District district = (District)super.get(District.class4);
23        Avenue a1 = new Avenue();
24        a1.setAname("和平路");
25        a1.setdistrict(district);
26        Avenue a2 = new Avenue();
27        a2.setAname("八一路");
28        a2.setdistrict(district);
29        Avenue a3 = new Avenue();
30        a3.setAname("五四大道");
31        a3.setdistrict(district);
32        super.add(a1);
33        super.add(a2);
34        super.add(a3);
35    }

36ExpandedSubBlockStart.gifContractedSubBlock.gif    public void TestDelAvenue(){
37        super.delete(Avenue.class18);
38    }

39}

在运行DoubleTest的时候,老出现org.hibernate.SessionException: Session is closed的错误

怎么想都不明白是什么原因,网上查了下,有的说是lazy要改成false,但改了之后还是一样

最后经过调试,终于发现错在事务的嵌套,delete函数中又调用了get函数,get函数返回的时候把session给关闭了

听我朋友说这个session是基于JDK的动态代理做出的事物管理的!基于一个session!

最后把程序修改了一下,终于成功了,附delete函数


ContractedBlock.gif ExpandedBlockStart.gif Code
 1ExpandedBlockStart.gifContractedBlock.gifprotected void delete(Class clz,Serializable id){
 2        Object item = this.get(clz, id);
 3        getSession();
 4        Transaction tc = null;       
 5ExpandedSubBlockStart.gifContractedSubBlock.gif        try{
 6            tc = session.beginTransaction();
 7            session.delete(item);
 8            tc.commit();
 9ExpandedSubBlockStart.gifContractedSubBlock.gif        }
catch(Exception e){
10ExpandedSubBlockStart.gifContractedSubBlock.gif            if(null!=tc){
11                tc.rollback();
12            }

13            e.printStackTrace();
14            System.out.println("In BaseHibernateDAO function delete");
15ExpandedSubBlockStart.gifContractedSubBlock.gif        }
finally{
16            closeSession();
17        }

18
19}

转载于:https://www.cnblogs.com/jayhuecko/archive/2009/08/14/1546439.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值