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