Hibernate 为什么要替换对象?

问题描述 投票:0回答:1

如果您通过存储库和父实体获取子实体,则它们将是两个不同的对象

如果我们想通过父实体保存子实体,我们也会得到一个不同的对象

为什么?这个问题可以解决吗?

示例:

@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:提前谢谢

java spring hibernate jpa orm
1个回答
0
投票

没办法。不可能。这就是 Spring 的工作方式

© www.soinside.com 2019 - 2024. All rights reserved.