我正在使用Hibernate在Tomcat上运行JSF应用程序; 我有一些dao方法来对数据库执行操作,如下所示:
*
public boolean removeJprogram(Jobprogram jp) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
org.hibernate.Transaction tx = session.beginTransaction();
try {
session.delete(jp);
tx.commit();
System.out.println("Record deleted");
return true;
} catch (Exception e) {
System.out.println(e.getMessage());
tx.rollback();
return false;
}finally{
session.close();
}
}
正如我在hibernate文档中读到的那样;但是我有错误会话已经关闭; 如果我没有把session.close,有时给我错误会话已经被选中或者像这样somtinh。
答案 0 :(得分:2)
检查hibernate配置文件中的自动提交,它可能设置为true。
答案 1 :(得分:0)
在同一个班级中,我的方法正常运行:
public List<Jobprogram> programsForUser(Date startDate, Date endDate, Users user) {
List programs = null;
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
org.hibernate.Transaction tx = session.beginTransaction();
try {
Criteria criteria = session.createCriteria(Jobprogram.class);
if (startDate != null) {
criteria.add(Restrictions.ge("day", startDate));
}
if (endDate != null) {
criteria.add(Restrictions.le("day", endDate));
}
criteria.add(Restrictions.eq("users", user));
criteria.addOrder(Order.asc("day"));
return criteria.list();
} catch (Exception e) {
System.out.println(e.getMessage());
tx.rollback();
return null;
}finally{
session.close();
}
}
所以我试图从上面的代码中删除tx.commit(),现在它工作正常;但是我想如果这是正确的工作方式.....我试着阅读关于工作单元的文章,以解决问题,但它看起来像一切模糊......
答案 2 :(得分:0)
简短说明:
正如Bassel使用openSession所回答的,代码在我提交转换时起作用;当我不提交转录时,会话定期关闭,因为pramod说,因为它不会坚持..(代码发布此信息)..如果我使用openSession或getCurrentSession
Session session = HibernateUtil.getSessionFactory().openSession();
org.hibernate.Transaction tx = session.beginTransaction();
try {
session.save(jobprogram);
session.flush();
session.clear();
tx.commit();
System.out.println("Record succesfully inserted....");
return true;
} catch (Exception e) {
return false;
}finally{
session.close();
}
并且我可以在另一段代码中执行,但这并不会持续......:
session=HibernateUtil.getSessionFactory().getCurrentSession();
try{
org.hibernate.Transaction tx=session.beginTransaction();
Query q = session.createQuery (
"from Users where user_name='"+username+"' and user_pass='"+password+"'");
user = (Users) q.list().get(0);
return user;
}catch(Exception e){
return null;
}finally{
session.close();
}
下一步是强调getCurrentSession和openSession之间的区别......