【发布时间】:2014-08-01 20:20:51
【问题描述】:
我有一个用于所有 Hibernate 逻辑的中心类(大部分我没有编写)。我们就叫它HibCentral吧。
我的代码使用这个类从 SQL 字符串创建查询:
public class HibCentral {
...some hibernate setup and other methods...
@Transactional
public Query createSQLQuery(final String sql) {
return getCurrentSession().createSQLQuery(sql);
}
}
getCurrentSession() 只是调用sessionFactory.getCurrentSession()。
我的课程(我们称之为MyClass)由高级服务(Service)调用。它获取一个 SQL 字符串,调用此方法以获取查询,填充其参数,并将其发送回服务。然后服务使用query.list() 调用查询。
public class MyClass {
public Query getQuery(Args args) {
Query q = hibCentral.createSQLQuery(getSQLString());
setParameters(q);
return q;
}
}
public class Service {
public void doIt() {
Query q = myClass.getQuery(args);
// some logic
List list = q.list();
}
}
但是等等,会话已关闭。
我也尝试将 list() 调用移至 Hibernate-logic 类:
public class HibCentral {
....other methods....
@Transactional
public List list(final Query query) {
return query.list();
}
}
但这会产生相同的“会话已关闭”错误。
我该怎么做才能完成这项工作?
【问题讨论】:
-
实际错误在哪里抛出?是在会话关闭时还是在您致电
list()时?
标签: java sql hibernate session