java – 如何防止Hibernate删除JSON帖子中没有的子对象?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何防止Hibernate删除JSON帖子中没有的子对象?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2196字,纯文字阅读大概需要4分钟。
内容图文
我有一个有孩子的JPA Property实体(多个Rate和多个Reservation).在我的JavaScript应用程序中,我通过REST {property:{rates:[…],reservations […]}来提取JSON.费率和预订非常详细,因此当我发布属性更新(如更改名称)时,我会从JSON POST有效负载中删除费率和预留.我希望Hibernate会简单地忽略丢失的密钥,但是唉,它正在删除所有保存的孩子.如果它们不存在,我如何指定Hibernate忽略它们?
@Entity
public class Property {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
String name;
@OneToMany(mappedBy = "property", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JsonManagedReference
private Set<SeasonRate> rates = new HashSet<>();
@OneToMany(mappedBy = "property", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private Set<Reservation> reservations = new HashSet<>();
}
Ps:我对级联的理解是有限的,但我确实想要的功能是,如果有人删除了一个属性,它必须删除费率和预订.尽管如此,我仍然无法通过完整属性更新费率或预订,所以也许我应该使用CASCADE = UPDATE?价格有自己的更新机制,预订也是如此.
解决方法:
迟到的答案,但是如果您使用Spring MVC Rest控制器来处理更新而不是Spring Data Rest控制器,那么前者似乎不支持部分更新/补丁请求.
使用传统的非平静网络应用程序直接通过表单修改实体,这当然是可能的.例如:
@RequestMapping
public String updateEntity(@ModelAttribute myEntity){
//submitted form parameters merged to existing entity
//loaded via getMyEntity() leaving unmodified fields as they were
}
@ModelAttribute
public MyEntity getMyEntity(){
//load some existing entity
}
但是,当通过@RequestBody将JSON绑定到实体时,这是不可能的:
@RequestMapping
public String updateEntity(@RequestBody myEntity){
//new instance instantiated by the Jackson mapper
//missing fields will be null
}
围绕这个有一些杰出的JIRA:
https://jira.spring.io/browse/SPR-13127
https://jira.spring.io/browse/SPR-10552
https://jira.spring.io/browse/SPR-13127
各种SO问题:
Spring Partial Update Object Data Binding
然而,好消息是Spring Data Rest确实通过补丁支持部分更新,因此如果它是将您的存储库公开为Rest Repository的选项,那么您应该能够实现所需的行为:
https://spring.io/guides/gs/accessing-data-rest/
PUT replaces an entire record. Fields not supplied will be replaced
with null. PATCH can be used to update a subset of items.
内容总结
以上是互联网集市为您收集整理的java – 如何防止Hibernate删除JSON帖子中没有的子对象?全部内容,希望文章能够帮你解决java – 如何防止Hibernate删除JSON帖子中没有的子对象?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。