Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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:事务性插入和单元测试_Java_Spring_Hibernate_Junit - Fatal编程技术网

Java Hibernate:事务性插入和单元测试

Java Hibernate:事务性插入和单元测试,java,spring,hibernate,junit,Java,Spring,Hibernate,Junit,我正在为DAO调用编写一个单元测试,以使用Hibernate将记录插入数据库 它是事务性的,我以这种方式使用@transactional: @RunWith( SpringJUnit4ClassRunner.class ) @ContextConfiguration(locations={"/spring-servlet.xml"}) @Transactional public class MyDaoTest { @Autowired private MyDao dao;

我正在为DAO调用编写一个单元测试,以使用Hibernate将记录插入数据库

它是事务性的,我以这种方式使用@transactional:

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations={"/spring-servlet.xml"})
@Transactional
public class MyDaoTest {

    @Autowired
    private MyDao dao;

    @Test
    @Rollback(false)
    public void testAddEmployee() {


        // Create some data (line 1)

        dao.addPerson(newPerson); // (line 2)

        // Query DB (line 3)

        // Check result (line 4)
    } // (line 5)
}
在上面的代码中,仅当函数在第5行终止时才提交操作

事实上,在第3行和第4行,我需要查询数据库,以检查insert是否已成功完成。但我不能这样做,因为我的数据仍然没有持久化

要测试此插件,我可以做什么?是否有一种在函数结束前提交的方法

我在这里添加了更多信息。这是控制台输出:

Hibernate: select person0_.ID as ID1_, person0_.NAME as NAME1_ from PERSON person0_
Hibernate: insert into PERSON (NAME) values (?, ?)
Hibernate: select person0_.ID as ID1_, person0_.NAME as NAME1_ from PERSON person0_

对于测试,我正在使用JUnit来测试插入,您可以使用以下断言:

Assert.assertNotNull(dao.findById(newPerson.getId()));
对于删除检查,您可以尝试以下测试:

@Test
public void testDelete(){
    ...
    dao.removePerson(person);
    Assert.assertNull(dao.findById(person.getId()));
}

为了测试插入,可以使用以下断言:

Assert.assertNotNull(dao.findById(newPerson.getId()));
对于删除检查,您可以尝试以下测试:

@Test
public void testDelete(){
    ...
    dao.removePerson(person);
    Assert.assertNull(dao.findById(person.getId()));
}

尝试在测试类级别添加@TransactionConfiguration(transactionManager=“transactionManager”,defaultRollback=true)。到第3行时,数据应该可以从DBI中查询到。我试图添加此注释,但仍然不起作用。函数结束后继续提交,第3行数据应该可以从持久化对象查询,验证方法是dao.addPerson(newPerson);int testId=newPerson.getAppId();Assert.assertEquals(1,testId);原因是,Hibernate保持将对象附加到处于持久化状态的会话,因此对该对象的任何查询都将返回您在开始之前使用的自动增量策略分配给您的id:请遵循此博客条目,其中包含一个用于保存和删除场景的junit测试用例示例。更多详情请参见第6节。简单地说,当您删除一个对象时,立即在下面一行加载/查找该对象并检查assertNull,然后尝试在测试类级别添加@TransactionConfiguration(transactionManager=“transactionManager”,defaultRollback=true)。到第3行时,数据应该可以从DBI中查询到。我试图添加此注释,但仍然不起作用。函数结束后继续提交,第3行数据应该可以从持久化对象查询,验证方法是dao.addPerson(newPerson);int testId=newPerson.getAppId();Assert.assertEquals(1,testId);原因是,Hibernate保持将对象附加到处于持久化状态的会话,因此对该对象的任何查询都将返回您在开始之前使用的自动增量策略分配给您的id:请遵循此博客条目,其中包含一个用于保存和删除场景的junit测试用例示例。更多详情请参见第6节。简单地说,当您删除一个对象时,立即在下面的行中加载/查找该对象并检查assertNull