Java 线程间共享休眠会话的替代方案

Java 线程间共享休眠会话的替代方案,java,multithreading,spring,hibernate,spring-transactions,Java,Multithreading,Spring,Hibernate,Spring Transactions,我正在使用Spring3.0.7/Hibernate3.5.0。 我有一些使用hibernate实体的代码。它工作正常。当我尝试对此代码进行集成测试时,问题就出现了。下面是关于交易的代码布局方案,只是想了解一下发行的内容 class EntityDAOImpl implements EntityDAO<T> { public T save(T entity) { getHibernateTemplate().saveOrUpdate(entity);

我正在使用Spring3.0.7/Hibernate3.5.0。 我有一些使用hibernate实体的代码。它工作正常。当我尝试对此代码进行集成测试时,问题就出现了。下面是关于交易的代码布局方案,只是想了解一下发行的内容

class EntityDAOImpl implements EntityDAO<T>
{
    public T save(T entity)
    {
        getHibernateTemplate().saveOrUpdate(entity);
    }
}
class EntityManagerImpl : implements EntityManager
{
    //EntityDAO dao;
    @Transactional
    public Entity createEntity()
    {
        Entity entity = dao.createNew();
        //set up entity
        dao.save(entity);
    }
    public Entity getFirstEntity()
    {
        return dao.getFirst();
    }
}
现在,我还对这段代码进行了集成测试。这就是问题所在。此测试的事务是回滚的,因为我不希望在完成后看到数据库中的任何更改

@TransactionConfiguration(transactionManager="transactionManagerHibernate", defaultRollback=true)
public class SomeTest
{
    @Transactional
    public void test() throws Exception
    {
        //the same piece of code as described above is run here. 
        //but since entityManager.createEntity(); doesn't close transaction, 
        //Thread2 will never find this entity when calling entityDao.findFirst()!!!!!
    }
}
我知道在线程之间共享hibernate会话不是一个好主意。 您建议采用什么方法来处理这种情况


我的第一个想法是尽量简化和避免线程化,但线程化可以帮助我释放内存,否则我将不得不在内存中保存大量数据。

而不是回滚测试事务,或者a)使用一个刚刚在末尾删除的内存数据库,或者b)在末尾的finally块中删除在测试中创建的Entite,怎么样。在我看来,您将不得不更改代码以满足您的测试,这通常是一种不好的模式。
@TransactionConfiguration(transactionManager="transactionManagerHibernate", defaultRollback=true)
public class SomeTest
{
    @Transactional
    public void test() throws Exception
    {
        //the same piece of code as described above is run here. 
        //but since entityManager.createEntity(); doesn't close transaction, 
        //Thread2 will never find this entity when calling entityDao.findFirst()!!!!!
    }
}