spring hibernate transaction junit new thread

时间:2013-09-23 22:36:46

标签: spring hibernate junit junit4

我正在使用spring托管的hibernate事务

<tx:annotation-driven transaction-manager="transactionManager" />

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="SessionFactory" />
</bean>

我有一个实现Runnable的类Task,它调用一个用@Transactional注释的方法。该方法使用hibernate条件查询api来返回一些结果。

class Task implements Runnable {
  public void run() {
    helperDao.getResults();
  }
}

class HelperDao {
  @Transactional
  public List<?> getResults() {
    return this.sessionFactory.getCurrentSession().createCriteria(Model.class).list();
  }
}

我有一个带有实例自动连接的junit4测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/test.xml")
@TransactionConfiguration(transactionManager = "transactionManager")
@Transactional
public class TaskTest {
  public void testTask() {
    Thread taskThread = new Thread(new Task(), "task-thread");
    taskThread.start();
    taskThread.join();
  }
}

如果我在主线程中运行任务,它会返回结果,但是当我在新线程中运行它时,它会在hibernate查询中阻塞并且永远不会返回。该日志仅表示hibernate已绑定查询参数。它没有加载结果集。

我假设这与spring事务和hibernate session.close()有关,但是无法弄清楚需要改变什么才能让它在不同的线程中执行。

非常感谢, 灰

0 个答案:

没有答案