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;
} 展开
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;
} 展开
展开全部
你的session变成同一个了,第一次操作成功,第二次就失败了,因为都是同一个session, 你把getSession方法给成 return HibernateSessionFactory.getSession(); 这样每次去获取都是新的。session你不要做成成员变量,使用起来危险,应该做成局部变量,每次都是重新定义,重新获取。。。
追问
依然不行,还是那个问题。
this.session=HibernateSessionFactory.getSession();
就等于是获取新的了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询