springboot 2.1.9
JPA为hibernate实现。
两个实体,关系如下:
//其他注解略
class A{
Long id;
Long refId;//关联 B 的ID
@ManyToOne(optional = true)
@JoinColumn(name = "refId", insertable = false, updatable = false, foreignKey=@ForeignKey(ConstraintMode.NO_CONSTRAINT))
B b;
}
class B{
Long id;
}
数据库中有对应的TA表和TB表,两张表之间并未从数据库层面建立外键关系。TA表中有ID为1,refId为2的一条数据。
调用A表jpa原生findById方法查询ID为1的数据时,若TB中存在ID为2的数据,此时正常查出数据。但是当手动将TB中ID为2的数据删除时,再调用A表的findById查询,就查询不到了。
【A表有数据,但关联的B表数据不存在】。此时需要添加hibernate注解
@NotFound(action= NotFoundAction.IGNORE)
更改后代码如下:
//其他注解略
class A{
Long id;
Long refId;//关联 B 的ID
@ManyToOne(optional = true)
@JoinColumn(name = "refId", insertable = false, updatable = false, foreignKey=@ForeignKey(ConstraintMode.NO_CONSTRAINT))
@NotFound(action= NotFoundAction.IGNORE)
B b;
}
class B{
Long id;
}
注解告诉hibernate,当未找到时忽略此值。
探讨SpringBoot 2.1.9环境下,使用JPA(由Hibernate实现)进行实体关联查询时遇到的问题。当A实体引用B实体,且B实体在数据库中不存在时,查询A实体会失败。通过添加@NotFound(action=NotFoundAction.IGNORE)注解解决该问题,确保即使关联实体不存在也能正常查询。
1153

被折叠的 条评论
为什么被折叠?



