Java Hibernate会话/EntityManager在提交()后关闭
我今天刚刚学会了如何使用Hibernate,我正在处理一个小数据库Java Hibernate会话/EntityManager在提交()后关闭,java,hibernate,session,Java,Hibernate,Session,我今天刚刚学会了如何使用Hibernate,我正在处理一个小数据库 public class HibernateQuery { private static final SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); private static final Session session = sessionFactory.getCurrentSession(); public st
public class HibernateQuery {
private static final SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
private static final Session session = sessionFactory.getCurrentSession();
public static void main(String[] args) {
queryA();
queryB();
session.close();
sessionFactory.close();
}
public static void queryA() {
Transaction tx = session.beginTransaction();
List<GradesJPA> lst = session.createQuery("from GradesJPA", GradesJPA.class).list();
for(GradesJPA each : lst) {
System.out.println(each);
}
tx.commit();
}
public static void queryB() {
Transaction tx = session.beginTransaction();
List<String> lst = session.createQuery("select g.className from GradesJPA g", String.class).list();
for(String each : lst) {
System.out.println(each);
}
tx.commit();
}
}
谢谢。
getCurrentSession()
生成一个会话
,一旦提交事务,该会话将自动关闭。您希望使用openSession()
替代。或者,如果您坚持使用getCurrentSession()
,请参阅
Exception in thread "main" java.lang.IllegalStateException: Session/EntityManager is closed
at org.hibernate.internal.AbstractSharedSessionContract.checkOpen(AbstractSharedSessionContract.java:360)
at org.hibernate.engine.spi.SharedSessionContractImplementor.checkOpen(SharedSessionContractImplementor.java:139)
at org.hibernate.internal.AbstractSharedSessionContract.beginTransaction(AbstractSharedSessionContract.java:465)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:350)
at com.sun.proxy.$Proxy33.beginTransaction(Unknown Source)
at hibernate.HibernateQuery.queryB(HibernateQuery.java:38)
at hibernate.HibernateQuery.main(HibernateQuery.java:18)