日常开发中遇到的bug总结.
2021年5月
0x01
现象: JPA
中双向关联如果使用mappedBy
会使foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)
失效, 如果不使用mappedBy
则会生层一张中间表.
版本: hiernate 5.x
临时解决方案:
- 使用已被废弃的注解
@org.hiernate.annotations.ForeignKey
注解使外键失效. - 自行去除外键,并且
jpa.hibernate.dll-auto
设置为none
. - 去除
mappedBy
, 接受中间表.
stackoverflow 地址: https://stackoverflow.com/questions/41729709/how-do-i-disable-hibernate-foreign-key-constraint-on-a-bidirectional-association
0x02
现象: zipInputstream
或者 zip4j
无法解压7zip
软件打包的的压缩包
版本: 2.4.2
解决方案: 无.
issue: https://github.com/srikanth-lingala/zip4j/issues/45
0x03
现象: junrar
无法解压rar5
版本的压缩包,也就是新版本的winrar
打包的压缩包是无法解压的
版本: 2.4.2
解决方案: 无
issue: https://github.com/junrar/junrar/issues/23
0x04
现象: 文件上传时,使用@RequestParam
, swagger2
无法生成对应的文件参数文档.
版本: swagger2 3.x
解决方法: 使用@RequsetPart
注解multipart
参数
0x05
现象: Spring data JPA 不支持
hibernate中的
@FetchMode,无法通过该注解直接实现
join查询来避免
N+1问题 版本: 2.4.2 解决方案: 使用
@EntityGraph解决该问题,可以无限向下关联;或者使用原生
sql查询;
spring data jpa自带的一些方法无法做到多级
join`,即使使用的该注解,这个问题很奇怪.
stackoverflow: https://stackoverflow.com/questions/30479748/jpa-how-to-define-namedentitygraph-for-3-levels
0x06
现象: Hibernate
或者jpa
实现多个实体类join
, 如果是hibernate
则在使用@FetchMode.JOIN
时候属性列指定为List
会报错, 如果是 spring data jpa
多个属性列为List
则不能同时使用FetchType.EAGRE
版本: 2.4.2
解决方案: 使用Set
作为属性的类型
stackoverflow: https://stackoverflow.com/questions/4334970/hibernate-throws-multiplebagfetchexception-cannot-simultaneously-fetch-multipl
2021年6月
0x01
现象: JPA
对于非主键关联支持报错, Tester
单向关联了Project
类的c_project_number
,
1 |
|
在根据项目编号和电话号码查询Tester
对向时,如果不存在Tester
对象,无任何问题,存在Tester
对象则报错,报错如下:
com.xxx.entity.Project is in unnamed module of loader 'app'; java.io.Serializable is in module java.base of loader 'bootstrap'
,
版本: 2.4.2
解决方案: 初步判断为查找出Tester
对象时,关联出Project
对象, 此时被app
这个classLoader
加载, 导致问题,具体深层次原因未深究, 此处临时解决办法是不使用c_project_number
字段关联, 使用Project
类的主键进行关联.
stackoverflow: ttps://stackoverflow.com/questions/61862202/using-jpa-elementcollection-for-a-string-collection-from-a-join-table
2022年6月
0x01
现象JPA
非主键关联,如果上级实体类和下级实体类同时包含另一个实体类,如下: Patient
和Recheck
都包含Department
对象,同时Recheck
又包含Patient
对象,
1 | Patient: |
1 | Recheck: |
此时查询Recheck
集合会出现多出查询问题,会单独出现一条语句,查询Recheck
里面的Department
对象,如果List<Rechck>
都是同一个部门那么,只会查询一次Deparment
对象,如果对应多个部门,则会查询多个部门.如果Department
使用主键关联则不会出现这种问题.
怀疑和非主键关联无法lazy加载有关,但是又不像.
版本:spring-data-jpa 2.6.0, hibernate-core 5.6.3
解决方案:EntityGraph
去除patient
查询,或者使用主键关联
stackoverflow: https://stackoverflow.com/questions/30082281/manytoonefetch-fetchtype-lazy-doesnt-work-on-non-primary-key-referenced-co