项目场景:
先简单交代一下项目背景吧,新上线的一个项目,在阿里云部署的数据库和应用,其中有两台服务器用作应用服务器部署。因为项目前期预算有限,所以采购的应用服务器配置为4核8G。因为硬件资源有限,所以部署完之后,free -m一查内存剩下个200多M,想到linux内存管理机制还挺优秀的,遂没管,反正系统部署了!
项目的数据层框架使用的是Mysql5.7.21(主从)+Hibernate 5.2.17-Final+Spring-boot-starter-data-jpa-2.0.6.RELEASE
PS.如果您项目过程中有遇到类似问题,不妨多花点时间把文章看完,因为您花在别处的时间也不一定有用,我花了三天的时间百度和Google都没解决,最终还是误打误撞解决了问题^_^。
问题描述:
问题出在前几天系统上线前再走一轮评测,结果在查询商品时就出现异常,排查后台日志发现抛出了大量EntityNotFound的异常,日志截图如下:
一开始看到这个问题,心里也没多慌。因为之前出现过,百度&Google大佬们都说了,如果是@ManyToOne映射中出现上述问题,直接给属性上面加上@NotFound注解,保管不报异常。
@ManyToOne(fetch = FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "storeid")
public PubStores getPubStores() {
return pubStores;
}
我加上了,这个EntityNotFound异常是没有了,但是查询商品的这个操作还是不正常,因为业务原因这个PubStores一定一定要有,不能为空,否则就影响到后面的价格和库存的取值,业务仍然无法正常进行。
那没辙,只能查查为什么这个实体属性查不到了。
首先先列举一下表结构及伪代码:
pub_stores_sku 门店商品表
表字段 | 类型 | 键 |
id | varchar | 主键 |
skuid | varchar | 外键pub_sku.skuid |
storeid | varchar | 外键pub_stores.storeid |
pub_sku 商品表