java - 运行时 Spring 启动 MySQLIntegrityConstraintViolationException
问题描述
我在springboot中有一个休息网络服务。网络服务正在删除照片、评论和地点。现在在调试时,rest 服务响应成功,但之后它显示 MySQLIntegrityConstraintViolationException。现在我知道它给出了错误,因为其中添加了折扣。如果孩子存在与否,我需要显示一条消息。为此,我需要捕捉到这个异常,但我无法捕捉到它。我尝试了 SQLException、DataIntegretyViolationException,但没有工作。
网络服务代码:
@GetMapping("deletePlaceById/{placeId}")
@Transactional
public RestResponse deletePlaceById(@PathVariable Long placeId) {
try {
List<PlacePhotosDto> photoList = placePhotosRepo.findByPlaceDto(new PlaceDto(placeId));
for (PlacePhotosDto placePhotosDto : photoList) {
AppUtilities.deleteFile(placePhotosDto.getPhotosUrl(), uploadFileDirectory);
}
List<PlacePhotosDto> imageList = placePhotosRepo.findByPlaceDto(new PlaceDto(placeId));
for (PlacePhotosDto placePhotosDto : imageList) {
placePhotosRepo.deleteById(placePhotosDto.getPhotosId());
}
List<PlaceReviewDto> reviewList = placeReviewRepo.findByPlaceDto(new PlaceDto(placeId));
for (PlaceReviewDto placeReviewDto : reviewList) {
placeReviewRepo.deleteById(placeReviewDto.getReviewId());
}
placeRepo.deleteById(placeId);
response = new RestResponse(AppConstants.RESPONSE_TEXT_SUCCESS, AppConstants.RESPONSE_CODE_SUCESS,
AppConstants.RESPONSE_TEXT_SUCCESS, true);
} catch (Exception e) {
e.printStackTrace();
response = new RestResponse(AppConstants.RESPONSE_TEXT_ERROR, AppConstants.RESPONSE_CODE_SERVER_ERROR,
AppConstants.RESPONSE_TEXT_ERROR, e.getMessage());
}
//This response shows success on debug in eclipse.
return response;
}
例外:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`questapp`.`cs_partner_discount`, CONSTRAINT `FK_dis_place` FOREIGN KEY (`place_id`) REFERENCES `cs_place` (`place_id`))
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_60]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_60]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_60]
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) ~[na:1.8.0_60]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998) ~[mysql-connector-java-5.1.45.jar:5.1.45]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-2.7.8.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-2.7.8.jar:na]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3325) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3562) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:99) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:599) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
and so on.
解决方案
推荐阅读
- javascript - Discord.js 如何使用 id 添加角色并让服务器冷却 2 小时
- wpf - 必应地图 WPF 添加位置标记
- gitlab - 如何在 Gitlab pipline (.gitlab-ci.yml) 中拆分变量
- image-processing - 图像背景一直与文字重叠?
- html - 随操作系统分辨率的变化自动调整 UI 元素的大小
- c# - 在 UWP Xaml 中使滑块拇指进展顺利移动
- microsoft-graph-api - 如何最小化 Microsoft Graph API 守护程序应用程序对单个 OneDrive Excel 文件的权限?
- amazon-web-services - Codedeploy 上关于 appspec 的开启和关闭错误
- typescript - 在 Typescript 中为 Web 组件导入 CSS 和 HTML 内容
- python - 为python中键的每个值执行一组给定的函数