Files
my-springboot-project/bug.txt

283 lines
30 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74a5df74] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@833048452 wrapping com.mysql.cj.jdbc.ConnectionImpl@76ba610e] will not be managed by Spring
==> Preparing: SELECT id,username,password,real_name,email,phone,avatar,user_type,status,dept_id,last_login_time,create_time,update_time FROM user WHERE id=?
==> Parameters: 1(Long)
<== Columns: id, username, password, real_name, email, phone, avatar, user_type, status, dept_id, last_login_time, create_time, update_time
<== Row: 1, admin, $2a$10$o/mdlaGbhm7Fm0yrYFGICODFyqYUu/cd9Nj1xzc/qD9r3ukNZQr8W, 系统管理员, admin@system.com, 13800000000, null, 1, 1, 1, null, 2026-04-16 09:05:15, 2026-05-10 19:08:59
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@74a5df74]
2026-06-10 13:44:38 - 请求 | URL: http://localhost:8080/api/exam/grade | 方法: POST | IP: 127.0.0.1
2026-06-10 13:44:38 - ========== 批阅接口请求开始 ==========
2026-06-10 13:44:38 - 请求完整内容: {"answer_type":"practice","answers":[{"max_score":10.0,"question_content":{"answer":"加强吸烟场所维护的主要目的是确保设施设备处于良好状态,保障文明吸烟环境功能作用的最大发挥,进一步提高消费者满意度。","data":{"scoring_points":[{"point":"要点1确保设施设备良好状态","weight":0.5},{"point":"要点2保障文明吸烟环境功能发挥","weight":0.3},{"point":"要点3提高消费者满意度","weight":0.2}]},"stem":"请简述加强吸烟场所维护的主要目的及意义。"},"question_id":"806754e9-3951-4562-8641-553c42564ab8","question_type":"subjective","student_answer":"加强吸烟场所维护可以确保设施良好,提升吸烟环境,让消费者更满意。"}],"request_id":"test_005"}
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@503b434e] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@437070389 wrapping com.mysql.cj.jdbc.ConnectionImpl@76ba610e] will not be managed by Spring
==> Preparing: SELECT id,username,password,real_name,email,phone,avatar,user_type,status,dept_id,last_login_time,create_time,update_time FROM user WHERE id=?
==> Parameters: 1(Long)
<== Columns: id, username, password, real_name, email, phone, avatar, user_type, status, dept_id, last_login_time, create_time, update_time
<== Row: 1, admin, $2a$10$o/mdlaGbhm7Fm0yrYFGICODFyqYUu/cd9Nj1xzc/qD9r3ukNZQr8W, 系统管理员, admin@system.com, 13800000000, null, 1, 1, 1, null, 2026-04-16 09:05:15, 2026-05-10 19:08:59
<== Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@503b434e]
2026-06-10 13:44:38 - 当前用户ID: 1
2026-06-10 13:44:38 - 答案数量: 1
2026-06-10 13:44:38 - 日常练习/模拟考模式,开始验证答案数据...
2026-06-10 13:44:38 - 答案数据验证通过共1个答案
2026-06-10 13:44:38 - 空试卷标记: isBlankSubmission=false
2026-06-10 13:44:38 - 自动生成试卷ID: paperId=68b2574e-e68b-486a-b86b-5426ab2e488b
2026-06-10 13:44:38 - 自动生成sessionId: grade_e099f4df
2026-06-10 13:44:38 - ========== 准备调用批阅服务 ==========
2026-06-10 13:44:38 - 批改答案请求参数汇总:
2026-06-10 13:44:38 - - userId: 1
2026-06-10 13:44:38 - - requestId: test_005
2026-06-10 13:44:38 - - paperId: 68b2574e-e68b-486a-b86b-5426ab2e488b
2026-06-10 13:44:38 - - sessionId: grade_e099f4df
2026-06-10 13:44:38 - - answerType: practice
2026-06-10 13:44:38 - - answers count: 1
2026-06-10 13:44:38 - Service层开始批改题目
2026-06-10 13:44:38 - Service层参数详情:
2026-06-10 13:44:38 - - userId: 1
2026-06-10 13:44:38 - - paperId: 68b2574e-e68b-486a-b86b-5426ab2e488b
2026-06-10 13:44:38 - - sessionId: grade_e099f4df
2026-06-10 13:44:38 - - answerType: practice
2026-06-10 13:44:38 - - 答案数量: 1
2026-06-10 13:44:38 - - AI服务地址: http://localhost:5001/exam/grade
2026-06-10 13:44:38 - Service层准备发送请求到AI服务
2026-06-10 13:44:38 - 请求体内容: {"request_id":"test_005","paper_id":"68b2574e-e68b-486a-b86b-5426ab2e488b","session_id":"grade_e099f4df","record_id":null,"answer_type":"practice","answers":[{"question_id":"806754e9-3951-4562-8641-553c42564ab8","question_type":"subjective","question_content":{"stem":"请简述加强吸烟场所维护的主要目的及意义。","data":{"scoring_points":[{"point":"要点1确保设施设备良好状态","weight":0.5},{"point":"要点2保障文明吸烟环境功能发挥","weight":0.3},{"point":"要点3提高消费者满意度","weight":0.2}]},"answer":"加强吸烟场所维护的主要目的是确保设施设备处于良好状态,保障文明吸烟环境功能作用的最大发挥,进一步提高消费者满意度。"},"student_answer":"加强吸烟场所维护可以确保设施良好,提升吸烟环境,让消费者更满意。","max_score":10.0}]}
2026-06-10 13:44:38 - 请求超时时间: 60000ms (60秒)
2026-06-10 13:44:41 - Service层收到AI服务响应
2026-06-10 13:44:41 - 响应原始内容: {"data":{"request_id":"test_005","results":[{"details":{"highlights":["\u5b66\u751f\u7b54\u6848\u7b80\u6d01\u660e\u4e86\uff0c\u80fd\u591f\u6293\u4f4f\u6838\u5fc3\u8981\u70b9\u3002","\u5bf9\u6d88\u8d39\u8005\u6ee1\u610f\u5ea6\u7684\u8868\u8ff0\u51c6\u786e\u3002"],"overall_feedback":"\u5b66\u751f\u7684\u7b54\u6848\u57fa\u672c\u7b26\u5408\u8981\u6c42\uff0c\u80fd\u591f\u6293\u4f4f\u4e3b\u8981\u89c2\u70b9\uff0c\u4f46\u5728\u90e8\u5206\u8981\u70b9\u7684\u8868\u8fbe\u4e0a\u7565\u663e\u7b80\u7565\uff0c\u5efa\u8bae\u8fdb\u4e00\u6b65\u5b8c\u5584\u8bed\u8a00\u8868\u8ff0\u4ee5\u63d0\u9ad8\u51c6\u786e\u6027\u3002","scoring_breakdown":[{"achieved":0.8,"comment":"\u5b66\u751f\u7b54\u6848\u63d0\u5230\u4e86'\u786e\u4fdd\u8bbe\u65bd\u826f\u597d'\uff0c\u4e0e\u8981\u70b9\u57fa\u672c\u4e00\u81f4\uff0c\u4f46\u672a\u660e\u786e\u63d0\u5230'\u8bbe\u65bd\u8bbe\u5907'\u7684\u5b8c\u6574\u8868\u8ff0\u3002","point":"\u8981\u70b91\uff1a\u786e\u4fdd\u8bbe\u65bd\u8bbe\u5907\u826f\u597d\u72b6\u6001","weight":0.5},{"achieved":0.6,"comment":"\u5b66\u751f\u7b54\u6848\u63d0\u5230'\u63d0\u5347\u5438\u70df\u73af\u5883'\uff0c\u4f46\u672a\u76f4\u63a5\u4f53\u73b0'\u4fdd\u969c\u6587\u660e\u5438\u70df\u73af\u5883\u529f\u80fd\u53d1\u6325'\u7684\u6838\u5fc3\u5185\u5bb9\u3002","point":"\u8981\u70b92\uff1a\u4fdd\u969c\u6587\u660e\u5438\u70df\u73af\u5883\u529f\u80fd\u53d1\u6325","weight":0.3},{"achieved":1.0,"comment":"\u5b66\u751f\u7b54\u6848\u660e\u786e\u63d0\u5230'\u8ba9\u6d88\u8d39\u8005\u66f4\u6ee1\u610f'\uff0c\u4e0e\u8981\u70b9\u5b8c\u5168\u4e00\u81f4\u3002","point":"\u8981\u70b93\uff1a\u63d0\u9ad8\u6d88\u8d39\u8005\u6ee1\u610f\u5ea6","weight":0.2}],"shortcomings":["\u672a\u660e\u786e\u63d0\u53ca'\u8bbe\u65bd\u8bbe\u5907'\u7684\u5b8c\u6574\u8868\u8ff0\u3002","\u5bf9'\u6587\u660e\u5438\u70df\u73af\u5883\u529f\u80fd\u53d1\u6325'\u7684\u7406\u89e3\u4e0d\u591f\u6df1\u5165\u3002"]},"max_score":10.0,"question_id":"806754e9-3951-4562-8641-553c42564ab8","score":8.0}],"score_rate":80.0,"success":true,"total_max_score":10.0,"total_score":8.0},"message":"\u6279\u9605\u5b8c\u6210","status":"success","status_code":2021,"success":true}
2026-06-10 13:44:41 - 开始解析 1 道题
2026-06-10 13:44:41 - 第 1 题 resultNode 内容: {"details":{"highlights":["学生答案简洁明了,能够抓住核心要点。","对消费者满意度的表述准确。"],"overall_feedback":"学生的答案基本符合要求,能够抓住主要观点,但在部分要点的表达上略显简略,建议进一步完善语言表述以提高准确性。","scoring_breakdown":[{"achieved":0.8,"comment":"学生答案提到了'确保设施良好',与要点基本一致,但未明确提到'设施设备'的完整表述。","point":"要点1确保设施设备良好状态","weight":0.5},{"achieved":0.6,"comment":"学生答案提到'提升吸烟环境',但未直接体现'保障文明吸烟环境功能发挥'的核心内容。","point":"要点2保障文明吸烟环境功能发挥","weight":0.3},{"achieved":1.0,"comment":"学生答案明确提到'让消费者更满意',与要点完全一致。","point":"要点3提高消费者满意度","weight":0.2}],"shortcomings":["未明确提及'设施设备'的完整表述。","对'文明吸烟环境功能发挥'的理解不够深入。"]},"max_score":10.0,"question_id":"806754e9-3951-4562-8641-553c42564ab8","score":8.0}
2026-06-10 13:44:41 - resultNode 字段: , 10.0, 806754e9-3951-4562-8641-553c42564ab8, 8.0
2026-06-10 13:44:41 - 读取到 question_id: 806754e9-3951-4562-8641-553c42564ab8
2026-06-10 13:44:41 - 已解析 details 结构
2026-06-10 13:44:41 - 从请求中补全 question_type: subjective
2026-06-10 13:44:41 - 处理第 1 题, 类型: subjective, grading_status: null
2026-06-10 13:44:41 - 检测到主观题,手动解析 details
2026-06-10 13:44:41 - 主观题 feedback 已设置,长度: 408
2026-06-10 13:44:41 - Service层AI服务批改完成
2026-06-10 13:44:41 - 批改结果: success=true, totalScore=8.0, totalMaxScore=10.0, scoreRate=80.0
2026-06-10 13:44:41 - 各题目批改结果:
2026-06-10 13:44:41 - 题目1(806754e9-3951-4562-8641-553c42564ab8): correct=null, score=8.0/10.0, feedback=【亮点】
1. 学生答案简洁明了,能够抓住核心要点。
2. 对消费者满意度的表述准确。
【综合评价】
学生的答案基本符合要求,能够抓住主要观点,但在部分要点的表达上略显简略,建议进一步完善语言表述以提高准确性。
【评分详情】
- 要点1确保设施设备良好状态 (权重: 50%, 得分率: 80%)
评价: 学生答案提到了'确保设施良好',与要点基本一致,但未明确提到'设施设备'的完整表述。
- 要点2保障文明吸烟环境功能发挥 (权重: 30%, 得分率: 60%)
评价: 学生答案提到'提升吸烟环境',但未直接体现'保障文明吸烟环境功能发挥'的核心内容。
- 要点3提高消费者满意度 (权重: 20%, 得分率: 100%)
评价: 学生答案明确提到'让消费者更满意',与要点完全一致。
【可改进之处】
1. 未明确提及'设施设备'的完整表述。
2. 对'文明吸烟环境功能发挥'的理解不够深入。
2026-06-10 13:44:41 - ========== 批阅成功 ==========
2026-06-10 13:44:41 - 批阅结果: totalScore=8.0, totalMaxScore=10.0, scoreRate=80.0%
2026-06-10 13:44:41 - 开始批量保存答题记录: count=1
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70586209]
JDBC Connection [HikariProxyConnection@305915904 wrapping com.mysql.cj.jdbc.ConnectionImpl@76ba610e] will be managed by Spring
==> Preparing: SELECT id,user_id,question_id,question_type,answer_type,paper_id,session_id,user_answer,score,max_score,is_correct,grading_type,feedback,time_spent,paper_time_spent,created_at,updated_at FROM user_answer WHERE (user_id = ? AND question_id = ? AND paper_id = ? AND answer_type = ?)
==> Parameters: 1(Long), 806754e9-3951-4562-8641-553c42564ab8(String), 68b2574e-e68b-486a-b86b-5426ab2e488b(String), practice(String)
<== Total: 0
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70586209]
Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70586209] from current transaction
==> Preparing: INSERT INTO user_answer ( user_id, question_id, question_type, answer_type, paper_id, session_id, user_answer, score, max_score, is_correct, grading_type, feedback, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 1(Long), 806754e9-3951-4562-8641-553c42564ab8(String), subjective(String), practice(String), 68b2574e-e68b-486a-b86b-5426ab2e488b(String), grade_e099f4df(String), "加强吸烟场所维护可以确保设施良好,提升吸烟环境,让消费者更满意。"(String), 8.0(BigDecimal), 10.0(BigDecimal), 0(Integer), ai(String), 【亮点】
1. 学生答案简洁明了,能够抓住核心要点。
2. 对消费者满意度的表述准确。
【综合评价】
学生的答案基本符合要求,能够抓住主要观点,但在部分要点的表达上略显简略,建议进一步完善语言表述以提高准确性。
【评分详情】
- 要点1确保设施设备良好状态 (权重: 50%, 得分率: 80%)
评价: 学生答案提到了'确保设施良好',与要点基本一致,但未明确提到'设施设备'的完整表述。
- 要点2保障文明吸烟环境功能发挥 (权重: 30%, 得分率: 60%)
评价: 学生答案提到'提升吸烟环境',但未直接体现'保障文明吸烟环境功能发挥'的核心内容。
- 要点3提高消费者满意度 (权重: 20%, 得分率: 100%)
评价: 学生答案明确提到'让消费者更满意',与要点完全一致。
【可改进之处】
1. 未明确提及'设施设备'的完整表述。
2. 对'文明吸烟环境功能发挥'的理解不够深入。(String), 2026-06-10T13:44:41.140192733(LocalDateTime), 2026-06-10T13:44:41.140943974(LocalDateTime)
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70586209]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70586209]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70586209]
2026-06-10 13:44:41 - ========== 批改答案发生未知异常 ==========
2026-06-10 13:44:41 - 错误类型: org.springframework.dao.DataIntegrityViolationException
2026-06-10 13:44:41 - 错误信息:
### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`knowledge_management_system`.`user_answer`, CONSTRAINT `fk_user_answer_question` FOREIGN KEY (`question_id`) REFERENCES `question` (`question_id`) ON DELETE CASCADE ON UPDATE RESTRICT)
### The error may exist in top/tqx/demo_1/mapper/UserAnswerMapper.java (best guess)
### The error may involve top.tqx.demo_1.mapper.UserAnswerMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO user_answer ( user_id, question_id, question_type, answer_type, paper_id, session_id, user_answer, score, max_score, is_correct, grading_type, feedback, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`knowledge_management_system`.`user_answer`, CONSTRAINT `fk_user_answer_question` FOREIGN KEY (`question_id`) REFERENCES `question` (`question_id`) ON DELETE CASCADE ON UPDATE RESTRICT)
; Cannot add or update a child row: a foreign key constraint fails (`knowledge_management_system`.`user_answer`, CONSTRAINT `fk_user_answer_question` FOREIGN KEY (`question_id`) REFERENCES `question` (`question_id`) ON DELETE CASCADE ON UPDATE RESTRICT)
2026-06-10 13:44:41 - 可能的错误位置:
2026-06-10 13:44:41 - at top.tqx.demo_1.service.impl.UserAnswerServiceImpl.batchSaveAnswers:UserAnswerServiceImpl.java (行号: 98)
2026-06-10 13:44:41 - at top.tqx.demo_1.service.impl.UserAnswerServiceImpl$$SpringCGLIB$$0.batchSaveAnswers:<generated> (行号: -1)
2026-06-10 13:44:41 - at top.tqx.demo_1.controller.ExamController.saveUserAnswers:ExamController.java (行号: 583)
2026-06-10 13:44:41 - at top.tqx.demo_1.controller.ExamController.gradeAnswers:ExamController.java (行号: 416)
2026-06-10 13:44:41 - at top.tqx.demo_1.aspect.LogAspect.around:LogAspect.java (行号: 43)
2026-06-10 13:44:41 - at top.tqx.demo_1.controller.ExamController$$SpringCGLIB$$0.gradeAnswers:<generated> (行号: -1)
2026-06-10 13:44:41 - 完整堆栈:
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`knowledge_management_system`.`user_answer`, CONSTRAINT `fk_user_answer_question` FOREIGN KEY (`question_id`) REFERENCES `question` (`question_id`) ON DELETE CASCADE ON UPDATE RESTRICT)
### The error may exist in top/tqx/demo_1/mapper/UserAnswerMapper.java (best guess)
### The error may involve top.tqx.demo_1.mapper.UserAnswerMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO user_answer ( user_id, question_id, question_type, answer_type, paper_id, session_id, user_answer, score, max_score, is_correct, grading_type, feedback, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`knowledge_management_system`.`user_answer`, CONSTRAINT `fk_user_answer_question` FOREIGN KEY (`question_id`) REFERENCES `question` (`question_id`) ON DELETE CASCADE ON UPDATE RESTRICT)
; Cannot add or update a child row: a foreign key constraint fails (`knowledge_management_system`.`user_answer`, CONSTRAINT `fk_user_answer_question` FOREIGN KEY (`question_id`) REFERENCES `question` (`question_id`) ON DELETE CASCADE ON UPDATE RESTRICT)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439)
at jdk.proxy2/jdk.proxy2.$Proxy87.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272)
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152)
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
at jdk.proxy2/jdk.proxy2.$Proxy107.insert(Unknown Source)
at top.tqx.demo_1.service.impl.UserAnswerServiceImpl.batchSaveAnswers(UserAnswerServiceImpl.java:98)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)
at top.tqx.demo_1.service.impl.UserAnswerServiceImpl$$SpringCGLIB$$0.batchSaveAnswers(<generated>)
at top.tqx.demo_1.controller.ExamController.saveUserAnswers(ExamController.java:583)
at top.tqx.demo_1.controller.ExamController.gradeAnswers(ExamController.java:416)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)
at top.tqx.demo_1.aspect.LogAspect.around(LogAspect.java:43)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)
at top.tqx.demo_1.controller.ExamController$$SpringCGLIB$$0.gradeAnswers(<generated>)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`knowledge_management_system`.`user_answer`, CONSTRAINT `fk_user_answer_question` FOREIGN KEY (`question_id`) REFERENCES `question` (`question_id`) ON DELETE CASCADE ON UPDATE RESTRICT)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)
at jdk.internal.reflect.GeneratedMethodAccessor30.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58)
at jdk.proxy3/jdk.proxy3.$Proxy163.execute(Unknown Source)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at jdk.proxy2/jdk.proxy2.$Proxy161.update(Unknown Source)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59)
at jdk.proxy2/jdk.proxy2.$Proxy160.update(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425)
... 102 common frames omitted
2026-06-10 13:44:41 - 响应 | 耗时: 2889ms