我的控制器如下: @GetMapping("/groupByCourse") public Reply getStudentsCountByCourse(){ Reply reply=new Reply(); reply.setData(service.getStudentsCountByCourse()); return reply; }服務(wù)是:-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; }存儲(chǔ)庫(kù)是:-@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();}我已經(jīng)在我的服務(wù)方法中使用 @Transactional(Transactional.TxType.REQUIRES_NEW) 來(lái)使用 Pessimistic_write 鎖執(zhí)行查詢,但即使在事務(wù)模式設(shè)置為需要新之后,我仍然收到TransactionRequiredException 。我知道我可以通過(guò)使用使代碼工作我的 getStudentsCountByCourse 方法上的 @Transactional 注釋,但我想知道它當(dāng)前不起作用的原因。我正在使用 springboot 版本 2.1.7.Release 并使用 mysql 作為數(shù)據(jù)庫(kù)
1 回答

四季花海
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是 Spring 默認(rèn) CGLIB 代理的已知限制。由于事務(wù)行為基于代理,因此目標(biāo)對(duì)象的一個(gè)方法調(diào)用其另一個(gè)方法不會(huì)導(dǎo)致事務(wù)行為,即使后一個(gè)方法被標(biāo)記為事務(wù)性的。
這可以通過(guò)在字節(jié)碼中編織事務(wù)行為而不是使用代理(即使用 AspectJ)來(lái)避免。
添加回答
舉報(bào)
0/150
提交
取消