Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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 @事务注释的方法不会将数据保存到数据库中_Java_Spring_Hibernate - Fatal编程技术网

Java @事务注释的方法不会将数据保存到数据库中

Java @事务注释的方法不会将数据保存到数据库中,java,spring,hibernate,Java,Spring,Hibernate,在我的单元测试中,我想持久化一些实体,并测试它们从数据库中的检索。它们没有被保存,我发现当测试方法也被注释为@Transaction时,它内部发生的任何事情都不会被持久化,即使方法完成时没有错误 我以前遇到过一个lazyiinitializationexception,当时我正在处理一个多对多延迟加载的关联,并且用@Transaction注释该方法似乎可以解决这个问题,这就是为什么我一直在使用它 实体无法保存的原因可能是什么?没有理由回滚事务,因为它不会失败 相关类代码: @Test @Tran

在我的单元测试中,我想持久化一些实体,并测试它们从数据库中的检索。它们没有被保存,我发现当测试方法也被注释为
@Transaction
时,它内部发生的任何事情都不会被持久化,即使方法完成时没有错误

我以前遇到过一个
lazyiinitializationexception
,当时我正在处理一个多对多延迟加载的关联,并且用
@Transaction
注释该方法似乎可以解决这个问题,这就是为什么我一直在使用它

实体无法保存的原因可能是什么?没有理由回滚事务,因为它不会失败

相关类代码:

@Test
@Transactional
public void plainPersistence() throws NullParameterException {
    User user = userHelper.createUser("User1", "password", null, null);

    Assert.assertNotNull(userDAO.findByUsername("User1"));
}
用户助手:

@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()
方法随后在
UserRepository
上调用
save()

@Repository
public interface UserRepository extends CrudRepository<User, Long> {
    public User findByUsername(String username);
}
@存储库
公共接口UserRepository扩展了Crudepository{
公共用户findByUsername(字符串用户名);
}
由于您可能正在使用,您应该注意,它们的配置使默认行为是回滚更改。要改变这一点,如果您使用的是Spring<4.2,那么您应该用注释您的测试类

@TransactionConfiguration(defaultRollback = false)

否则,请用

谢谢注释课堂,这确实有帮助。虽然现在我得到一个异常
org.springframework.transaction.TransactionSystemException:无法提交JPA事务;嵌套异常是javax.persistence.RollbackException:标记为rollbackOnly的事务
,但我认为这是一个进步,这是由于逻辑本身发生了真正的异常。这你得弄清楚