@Transaction带注释的方法不会将数据保存到数据库中

时间:2016-03-26 16:57:27

标签: java spring hibernate

在我的单元测试中,我希望保留一些实体并从数据库中测试它们的检索。它们没有得到保存,我发现当测试方法也用@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);
}

1 个答案:

答案 0 :(得分:0)

由于您可能使用Spring test,因此应注意它们已配置为默认行为是回滚更改。要更改此项,您应该使用Spring注释您的测试类,如果您使用的是Spring&lt; 4.2

@TransactionConfiguration(defaultRollback = false)

否则,使用@Rollback(value = false)

注释班级