如何解决保存父实体时子实体未持久化
我有两个具有一对一关系的实体。
它们如下,
@Entity
class Parent {
@Id
private String id;
@OneToOne(mappedBy = "parent",cascade = CascadeType.ALL)
private Child child;
// getter setter
}
@Entity
public class Child {
@Id
private String id;
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name = "id",insertable = false,updatable = false)
private Parent parent;
// getter setter
}
@Service
public TestService {
@Autowired
private ParentRepository parentRepository;
public void testMethod() {
// Creating new ChildElement
Parent p = parentRepository.findById("ID1").get();
Child c = parent.getChild()
if(c == null) {
c = new Child()
c.setId("ID2");
}
// set child with some property
p.setChild(c);
parentRepository.save(p);
}
}
当我第一次创建新的子实体时,此代码有效。但是当更新子实体时,它没有得到更新。
如果我遗漏了什么,请告诉我。
解决方法
我猜你的问题与这条线有关。
@JoinColumn(name = "id",insertable = false,updatable = false)
private Parent parent;
我的意思是 insertable = false
和 updatable = false
。
当可更新和可插入等于 false 时,我认为它不会更新。
您必须进行双向设置。 在 p.setChild(c) 之后添加以下行。
C.setParent(p)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。