Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会得到;createCriteria在没有活动事务的情况下无效;例外?_Java_Hibernate_Transactions_Junit - Fatal编程技术网

Java 为什么我会得到;createCriteria在没有活动事务的情况下无效;例外?

Java 为什么我会得到;createCriteria在没有活动事务的情况下无效;例外?,java,hibernate,transactions,junit,Java,Hibernate,Transactions,Junit,我正在使用Hibernate4.0.1.Final。我试图在我的DAO对象上运行JUnit测试,但遇到异常,“createCriteria在没有活动事务的情况下无效”。奇怪的是,我在调用DAO方法之前启动了事务。我有 @Test public void testFindProductByTitle() { final Session session = sessionFactory.openSession(); final Transaction tx = session.be

我正在使用Hibernate4.0.1.Final。我试图在我的DAO对象上运行JUnit测试,但遇到异常,“createCriteria在没有活动事务的情况下无效”。奇怪的是,我在调用DAO方法之前启动了事务。我有

@Test
public void testFindProductByTitle() { 
    final Session session = sessionFactory.openSession();
    final Transaction tx = session.beginTransaction();
    final Product product = productDao.findByTitle(testProps.getProperty("test.product.name"));
    tx.commit();  
    session.close();
    Assert.assertNotNull(product);
    Assert.assertEquals(testProps.getProperty("test.product.name"), product.getName());
}
我的刀包括

public Product findByTitle(String title) {
    final Session session = sessionFactory.getCurrentSession();
    final Criteria criteria = session.createCriteria(Product.class);
    criteria.add(Restrictions.eq("name", title));
    final List<Product> results = criteria.list();
    final Product result = results.get(0); 
    return result;
}

你知道怎么回事吗?Junit测试中的sessionFactory与我初始化DAO测试时使用的sessionFactory相同

getCurrentSession()
不会返回与
openSession()相同的会话。前者返回上下文(默认情况下为线程绑定)会话。后者创建一个不同于上下文会话的新会话。

getCurrentSession()
不会返回与
openSession()相同的会话。前者返回上下文(默认情况下为线程绑定)会话。后者创建一个新会话,与上下文会话不同。

只需从void testFindProductByTitle()中剪切一行并粘贴到Product findByTitle(String)方法中,即:

final Transaction tx = session.beginTransaction();

只需从void testFindProductByTitle()中剪切一行并粘贴到Product findByTitle(String)方法中,即:

final Transaction tx = session.beginTransaction();