我的控制器如下: @GetMapping("/groupByCourse") public Reply getStudentsCountByCourse(){ Reply reply=new Reply(); reply.setData(service.getStudentsCountByCourse()); return reply; }服务是:-public List getStudentsCountByCourse() { List students=new ArrayList<>(); students=studentCourseRepo.findCountStudentByCourse(); getCourseCountByStudent(); return students; } @Transactional(Transactional.TxType.REQUIRES_NEW) public List getCourseCountByStudent() { List students=new ArrayList<>(); students=studentCourseRepo.findCountCourseByStudent(); return students; }存储库是:-@Repositorypublic interface StudentCourseRepo extends CrudRepository<StudentCourseTbl, StudentCourseTblPK> { @Query(value = "select sc.studentCourseTblPK.courseId,count(sc.studentCourseTblPK.studentId) from StudentCourseTbl sc group by sc.studentCourseTblPK.courseId") List findCountStudentByCourse(); @Lock(LockModeType.PESSIMISTIC_WRITE) @Query(value = "select s.id,s.name,count(sc.studentCourseTblPK.courseId) from StudentCourseTbl sc right join StudentsTbl s on sc.studentCourseTblPK.studentId=s.id group by s.id") List findCountCourseByStudent();}我已经在我的服务方法中使用 @Transactional(Transactional.TxType.REQUIRES_NEW) 来使用 Pessimistic_write 锁执行查询,但即使在事务模式设置为需要新之后,我仍然收到TransactionRequiredException 。我知道我可以通过使用使代码工作我的 getStudentsCountByCourse 方法上的 @Transactional 注释,但我想知道它当前不起作用的原因。我正在使用 springboot 版本 2.1.7.Release 并使用 mysql 作为数据库
1 回答
四季花海
TA贡献1811条经验 获得超5个赞
这是 Spring 默认 CGLIB 代理的已知限制。由于事务行为基于代理,因此目标对象的一个方法调用其另一个方法不会导致事务行为,即使后一个方法被标记为事务性的。
这可以通过在字节码中编织事务行为而不是使用代理(即使用 AspectJ)来避免。
添加回答
举报
0/150
提交
取消