为什么在springboot一个继承jpaRepository的接口中,@Query注解的方法前面一定要使用@Transactional,不使用后面使用方法就会报错
时间: 2023-04-01 14:03:37 浏览: 74
这是因为@Transactional注解可以保证在方法执行期间,如果出现异常,会回滚事务,保证数据的一致性。而在使用@Query注解时,如果不加@Transactional注解,可能会导致数据操作不一致,从而报错。因此,在使用@Query注解时,建议加上@Transactional注解,以保证数据的正确性。
相关问题
同一个类中有@Transactional注解的方法怎么调用同样有@Transactional注解的方法
在同一个类中,如果一个方法上有@Transactional注解,那么调用同样有@Transactional注解的方法时,事务是不会生效的。这是因为@Transactional注解是基于Spring AOP实现的,而Spring AOP是基于代理模式实现的。当一个类中的方法被调用时,Spring AOP会为该类生成一个代理对象,代理对象会拦截被调用的方法,并在方法执行前后进行一些处理,比如开启和提交事务。但是,如果一个方法调用同样有@Transactional注解的方法时,代理对象并不会拦截这个方法的调用,因此事务也不会生效。
如果需要在同一个类中调用同样有@Transactional注解的方法时,可以通过将被调用的方法抽取到另外一个类中,并在该类上添加@Transactional注解来实现。这样,在调用该类中的方法时,Spring AOP会为该类生成代理对象,并拦截被调用的方法,从而使事务生效。
springboot项目中使用@Transactional注解事务没有提交前,在同一个方法中,插入一条数据,再次查询,能否查出这条数据
在同一个方法中使用 `@Transactional` 注解开启了事务,如果没有手动提交事务,插入的数据并不会立即被写入数据库。因此,再次查询时是无法查出这条数据的。
只有当事务成功提交后,才能在其他事务中看到新插入的数据。在 Spring Boot 中,事务默认是开启自动提交的,也就是说,当方法执行完毕时,事务会自动提交,因此插入的数据会被写入数据库,可以查询到。但是,如果在同一个方法中使用 `@Transactional` 注解开启了事务,并且没有手动提交事务,那么在同一个方法中是无法查询到新插入的数据的。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)