我试图用hibernate sql方法创建对象类,例如添加新记录,从数据库获取数据等。一切正常,但只有ONCE。当我尝试再次调用相同的方法时,我得到“会话已关闭”错误。这是选择一种记录方法的代码:
public static Event getSqlRecord(int id) {
SessionFactory session = HibernateSessionFactory.getSessionFactory();
Session sess = session.getCurrentSession();
Transaction tx = sess.beginTransaction();
Event ev = new Event();
try {
Query query = sess.createQuery("from Event where idWydarzenia = :id");
query.setParameter("id", id);
ev = (Event)query.uniqueResult();
} finally {
session.close();
}
session.close();
return ev;
}
关于HibernateSessionFactory,这是类体:
package pl.objects;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
@SuppressWarnings("deprecation")
public class HibernateSessionFactory {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
catch (Throwable ex) {
System.out.println("Blad inicjalizacji SessionFactory" + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
我正在使用我在一些教程中找到的示例。我如何让这个方法做开放会话,做东西然后关闭它?
答案 0 :(得分:0)
使用sessionFactory.getCurrentSession()时不需要关闭会话;
上下文/交易将负责为您关闭它。