hibernate无法删除表的数据

无论删除什么表的数据,都会报错org.hibernate.SessionException:Sessionisclosed把删除方法换成查询方法就不会报错。添加也没错。修... 无论删除什么表的数据,都会报错
org.hibernate.SessionException: Session is closed
把删除方法换成查询方法就不会报错。添加也没错。修改也没错。
这是我的BaseDao里的delete方法
public void delete(Class clz,java.io.Serializable id){
Transaction tx=null;
Session session= null;
session= getSession();
try {
tx=session.beginTransaction();
session.delete(this.get(clz, id));
tx.commit();
} catch (Exception e) {
if(null!=tx){tx.rollback();}
e.printStackTrace();
}finally{
clossSession();
}
}
这是getSession()方法
public Session getSession(){
this.session=HibernateSessionFactory.getSession();
return this.session;
}
这是clossSession()
public void clossSession(){
this.session=null;
HibernateSessionFactory.closeSession();
}

里面还有一些HibernateSessionFactory的代码,那是myeclipse自动生成的工具类。
ok,问题解决了,原因还是自动生成的那个类HibernateSessionFactory

里面的session是从private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();里面获取的,虽然我英文不好,但是我能看出来这样做实在不妥。。。所以,只好自己写出来一个
public Session getSession(){
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session=sf.openSession();
return session;
}
展开
 我来答
luhfly
2011-07-10 · TA获得超过341个赞
知道小有建树答主
回答量:695
采纳率:0%
帮助的人:430万
展开全部
你的session变成同一个了,第一次操作成功,第二次就失败了,因为都是同一个session, 你把getSession方法给成 return HibernateSessionFactory.getSession(); 这样每次去获取都是新的。session你不要做成成员变量,使用起来危险,应该做成局部变量,每次都是重新定义,重新获取。。。
追问
依然不行,还是那个问题。
this.session=HibernateSessionFactory.getSession();
就等于是获取新的了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式