我试图用Hibernate实现他的Java代码,以便进行SQL查询:
public List<AttendeeModel> getListOfCds(int firstRow, int rowCount) {
List<AttendeeModel> cdList = null;
try {
session.beginTransaction();
Criteria criteria = session.createCriteria(AttendeeModel.class);
criteria.setFirstResult(firstRow);
criteria.setMaxResults(rowCount);
if (criteria != null) {
cdList = (List<AttendeeModel>) criteria.list();
}
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
return cdList;
}
public int countRows() {
try {
session.beginTransaction();
Criteria criteria = session.createCriteria(AttendeeModel.class);
if (criteria != null) {
return criteria.list().size();
}
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}
return 0;
}
字符串
但由于某种原因,我得到了这个错误:
java.lang.IllegalStateException: Session/EntityManager is closed
型
你知道我如何解决这个问题吗?
2条答案
按热度按时间mitkmikd1#
从你的代码中,不清楚
session
在哪里被声明,以及它是如何被填充的。考虑到这在某种程度上是正确的,我怀疑在countRow中返回之前缺少transaction commit/rollback会导致异常,尝试:字符串
oo7oh9g92#
如果只使用
@PersistenceContext
,则无法正常工作,我们还需要设置PersistenceContextType,默认为TRANSACTION
,但在这种情况下,当多个线程尝试使用EntityManager
的同一个单例示例时,我们需要像这样将其设置为EXTENDED
-字符串
而且它起作用了。当我试图在我的一个数据库中执行db查询时,我遇到了这个问题。