如果您通过存储库和父实体获取子实体,则它们将是两个不同的对象
如果我们想通过父实体保存子实体,我们也会得到一个不同的对象
为什么?这个问题可以解决吗?
示例:
@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:提前谢谢
没办法。不可能。这就是 Spring 的工作方式