【发布时间】:2016-10-07 11:38:58
【问题描述】:
我有一个 JPA Property 实体,它有孩子(多个 Rate 和多个 Reservation)。在我的 JavaScript 应用程序中,我通过 REST {property:{rates:[...], reservations[...]} 拉动 JSON。 Rates and Reservations 非常冗长,所以当我发布属性更新(比如更改名称)时,我会从JSON POST 有效负载中删除rates 和reservations。我希望 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?价格有自己的更新机制,预订也有。
【问题讨论】:
-
JSON 如何解组到实体?
-
@AlanHay,在 Spring Boot 中使用默认的 Jackson Marshaller
标签: java spring hibernate jpa spring-data-jpa