gpt4 book ai didi

java - 保存前未设置关系 ID

转载 作者:行者123 更新时间:2023-12-02 07:14:08 24 4
gpt4 key购买 nike

我有一个订单,其中包含...

private Collection<OrderCustomField> orderCustomFields;

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
public Collection<OrderCustomField> getOrderCustomFields() {
return orderCustomFields;
}

@JsonProperty("CustomFields")
public void setOrderCustomFields(Collection<OrderCustomField> orderCustomFields) {
this.orderCustomFields = orderCustomFields;
}

并且 OrderCustomFields 具有

private Order order;

@ManyToOne
@javax.persistence.JoinColumn(name = "order_id", referencedColumnName = "id", nullable = false)
public Order getOrder() {
return order;
}

public void setOrder(Order order) {
this.order = order;
}

保存订单时,order_id 未填充到 OrderCustomField 中。我认为 Cascade = CascadeType.ALL 会处理填充这些值。有什么我错过的,或者没有像我想象的那样工作吗?

最佳答案

当 Hibernate 需要存储与数据库的双向关系并且存在冲突信息(一方引用另一方,但反之亦然)时,Hibernate 依赖关系的拥有方。通过在 @OneToMany 上指定 mappedBy="order",您将声明多方为关系的拥有方。

如果您将其取消,那么拥有方将成为关系的一侧(这是一对多关系的默认设置),您将得到您想要的行为。

但是,Hibernate 建议您始终设置关系的双方。这是因为在实体进入数据库并重新加载之前,另一半不会被填充。换句话说,一旦你打开二级缓存,你就会开始遇到麻烦,因为订单字段将为空,直到缓存从数据库重新加载实体。

关于java - 保存前未设置关系 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15159042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com