在每种情况下,我们都会为同一实体获取多个对象,这会导致违反数据一致性。为什么?这个可以解决吗?
示例:
@Entity
class Kid {
@Id
private String id;
private String parentId;
}
@Entity
class Parent {
@Id
private String id;
@JoinColumn(name = "parentId")
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private List<Kid> kids = new ArrayList<>();
}
//Ex1
var kid = kidRepo.findAll().get(0); //Kid@11111
var sameKid = parentRepo.findParent().getKids().get(0); //Kid@22222
assertTrue(kid.getId().equals(sameKid.getId()));
assertFalse(kid == sameKid);
//Ex2
var kid = new Kid(parent.getId()); //Kid@11111
var parent = parentRepo.findParent();
parent.getKids().add(kid);
parentRepo.save(parent);
var sameKid = parent.getKids.get(0); //Kid@22222
assertTrue(kid.getId().equals(sameKid.getId()));
assertFalse(kid == sameKid);
P.S:提前谢谢
您只需覆盖
equals
和 hashCode
即可让您的断言生效。您不会从两个不同的存储库和/或查询中获得完全相同的实例,哈哈。你希望 Spring 如何知道?
没办法。不可能。这就是 Spring 的工作方式