2 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
我是你的商家模型,你為地址屬性設(shè)置的。這意味著在這種情況下,如果您想保留具有某些地址的 Merchant 對(duì)象,休眠將檢查這些地址是否已存在;如果沒(méi)有,它將在之前創(chuàng)建它們。但在地址模型中,您設(shè)置為商家屬性,這意味著如果沒(méi)有現(xiàn)有商家,則無(wú)法保留地址對(duì)象。然后,當(dāng)休眠者嘗試持久化商家并找到尚未持久化的地址時(shí),它會(huì)嘗試在此之前持久化此地址,它還會(huì)找到一個(gè)空 Merchant 對(duì)象,然后引發(fā)此異常。cascade = {CascadeType.ALL}
nullabel = false
org.hibernate.exception.ConstraintViolationException
您必須選擇以下建議之一:
刪除地址模型上商家屬性中的約束。如果您這樣做,地址將保留在沒(méi)有商家的情況下。然后,當(dāng)您堅(jiān)持時(shí),商家休眠將更新地址。
nullable = false
更改為除“商家模型的 PERSIST 地址”屬性之外的所有其他級(jí)聯(lián)。如果您這樣做,您應(yīng)該在自己之前保留商家,然后將地址保留在現(xiàn)有商家中。
cascade = {CascadeType.ALL}

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
在“商品”表中:
@OneToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE}, mappedBy = "merchant") private Set<Address> addresses = new HashSet<Address>( 0);
在地址表中:
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "merchant_id") @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) @Getter(onMethod = @__( @JsonIgnore)) @Setter private Merchant merchant;
使用中:
public Merchant saveMerchant(Merchant merchant) { merchant = merchantRepository.save(merchant); Merchant finalMerchant = merchant; merchant.getAddresses().forEach(address -> { address.setMerchant(finalMerchant); addressRepository.save(address); }); return merchant; }
它完美地工作。
添加回答
舉報(bào)