在我的单元测试中,我希望保留一些实体并从数据库中测试它们的检索。它们没有得到保存,我发现当测试方法也用@Transaction
注释时,它内部发生的任何事情都没有得到持久化,即使该方法没有错误完成。
我在遇到多对多延迟加载关联时遇到了LazyInitializationException
,用@Transaction
注释方法似乎解决了问题,这就是我使用它的原因。
实体没有得到保存的原因是什么?事务没有理由回滚,因为它不会失败。
相关课程代码:
@Test
@Transactional
public void plainPersistence() throws NullParameterException {
User user = userHelper.createUser("User1", "password", null, null);
Assert.assertNotNull(userDAO.findByUsername("User1"));
}
userHelper:
@Service
public class UserHelper {
@Autowired
private UserDAO userDAO;
public User createUser(...) throws NullParameterException {
User newUser = new User(username, ...);
userDAO.save(newUser);
return newUser;
}
UserDAO的save()
方法随后在save()
上调用UserRepository
:
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
public User findByUsername(String username);
}
答案 0 :(得分:0)
由于您可能使用Spring test,因此应注意它们已配置为默认行为是回滚更改。要更改此项,您应该使用Spring注释您的测试类,如果您使用的是Spring&lt; 4.2
@TransactionConfiguration(defaultRollback = false)
注释班级