每个线程多个同时进行的hibernate会话

时间:2014-06-27 07:48:22

标签: java hibernate session transactions

我正在开发一个使用hibernate作为OR Mapper的REST Web服务。我最近将hibernate从3.2升级到4.3并且出现了错误described here。基本上我的事务已经回滚到某个地方然后当我想再次使用该会话时出现错误(这是正确的休眠行为)。

我想我弄明白为什么会出现这个错误。这是因为当我收到请求时,会启动一个长会话。此会话还会打开一个将在更长时间内打开的交易。除了这个长时间运行的会话/事务之外,还应该在同一个线程上打开一些小会话/事务。据我所知,所有会话都使用相同的UserTransaction,因为小事务提交和回滚此事务,我在我的其他帖子中描述的错误中运行。

由于我正在使用庞大的代码库,因此很容易更改代码,以便所有会话会话在不同的线程中运行(如果有帮助)或重构整个服务,以便只有一个事务可以随时打开。

实际问题从此处开始

是否有可能在一个线程中启动多个同时进行的会话/事务?如果是这样,我需要做什么,告诉hibernate这样做?如果这不可能,你建议采用何种方式来完成类似的行为?

我用来创建会话的代码段

Session session = sessionFactory.openSession();
CustomSessionWrapper dpSession = new CustomSessionWrapper(session, this);

if (!session.isClosed() && !session.getTransaction().isActive()) {
    session.beginTransaction();
}

代码在我升级hibernate之前工作,所以问题不应该在CustomSessionWrapper或任何其他自定义类中。

提前多多感谢!

0 个答案:

没有答案