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,当未找到时忽略此值。