Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 为什么不是';我的Hibernate插入是否反映在我的Hibernate查询中?_Java_Hibernate - Fatal编程技术网

Java 为什么不是';我的Hibernate插入是否反映在我的Hibernate查询中?

Java 为什么不是';我的Hibernate插入是否反映在我的Hibernate查询中?,java,hibernate,Java,Hibernate,我被要求为基于hibernate的数据访问对象编写一些编码测试 我想我应该从一个简单的测试开始:当我保存一个模型时,它应该在dao.getTheList()返回的集合中。问题是,不管怎样,当我调用dao.getTheList()时,它始终是一个空集合 应用程序代码已经在生产环境中运行,所以让我们假设问题只存在于我的测试代码中 @Test @Transactional("myTransactionManager") public void trivialTest() throws Exceptio

我被要求为基于hibernate的数据访问对象编写一些编码测试

我想我应该从一个简单的测试开始:当我保存一个模型时,它应该在
dao.getTheList()
返回的集合中。问题是,不管怎样,当我调用
dao.getTheList()
时,它始终是一个空集合

应用程序代码已经在生产环境中运行,所以让我们假设问题只存在于我的测试代码中

@Test
@Transactional("myTransactionManager")
public void trivialTest() throws Exception {

    ...
    // create the model to insert
    ...

    session.save(model);
    session.flush();

    final Collection<Model> actual = dao.getTheList();

    assertEquals(1, actual.size());
}
我还尝试从测试线程中删除
@Transactional
注释,并注释两个helper方法中的每一个,每个Hibernate作业一个。对于这一点,尽管我得到了错误:
没有绑定到线程的Hibernate会话,并且配置不允许在这里创建非事务会话


[/edit]

我认为底层DBMS可能会隐藏对其他事务的更改,只要更改的事务尚未完成。getTheList是否在额外事务中运行?您使用的是oracle还是postgres?

dao.getTheList()中有什么内容;这是一个空集合这是内存数据库中的H2。我倾向于同意,这与交易有关。不过,事务是由测试方法上的注释驱动的。我尝试手动提交事务,但它只是错误。我将扩展我的问题,以包括我用它所做的测试。ejb中不允许混合使用声明式和显式事务管理。所以我不知道该怎么办。但也许:你能帮忙吗?或者,您可以将插入封装到使用“REQUIRES_NEW”完成的方法中。或者,dao中的查询最终无法正常工作。
@Test
@Transactional("myTransactionManager")
public void trivialTest() throws Exception {

    ...
    // create the model to insert
    ...

    final Transaction firstTransaction = session.beginTransaction();
    session.save(model);
    session.flush();
    firstTransaction.commit();

    final Transaction secondTransaction = session.beginTransaction();
    final Collection<SystemConfiguration> actual = dao.getTheList();
    secondTransaction.commit();

    assertEquals(1, actual.size());
}