![](/img/trans.png)
[英]FetchMode join makes no difference for ManyToMany relations in spring JPA repositories
[英]Spring JPA updating ManyToMany relations/link_table with very large child datasets
我們有一些對象可能與成百上千個地址存在ManyToMany關系,並且正在尋找一種使用Spring JPA在我們的數據庫中對此模型進行有效建模的方法。 現在,我們有這樣的事情:
優惠券:
couponId
...
地址:
addressId
地址
市
...
coupon_address:
businessId
addressId
Coupon.java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long couponId;
...
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="coupon_address", joinColumns = {
@JoinColumn(name="couponId") }, inverseJoinColumns={
@JoinColumn(name="addressId") })
private Collection<Address> addresses;
Address.java
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long addressId;
...
我們有一個存儲過程,該過程將返回最近的地址,效果很好。
問題:
當我們更新優惠券的詳細信息時,我們不希望在保存到數據庫之前必須用所有地址填充優惠券對象。 如果我們不這樣做,將從鏈接表中刪除地址關系。 有沒有一種方法可以保存優惠券而不影響鏈接表?
有沒有一種方法可以在鏈接表中填充條目,而不必將關聯的優惠券與整個地址集一起保存?
當查詢最近的地址時,我們只希望將結果地址填充到客戶端的Coupon對象中。 由於我們使用LAZY來獲取優惠券,因此我們可以避免調用Coupon.getAddresses並手動填充地址的子集。
我不知道如何處理問題#1,也不確定#2是否足夠。 大多數時候,我們不必擔心每個優惠券都有大量地址,但是潛力確實存在。
謝謝。
那是因為您沒有更新優惠券。 更新優惠券將包括
Coupon c = em.find(Coupon.class, id); c.setXxx(...);
只需執行此操作即可更新優惠券,而不是合並沒有地址的新優惠券。
addresses
是優惠券的地址集合。 不是用於加載優惠券的某些查詢找到的地址。 如果需要優惠券地址的子集,請執行查詢以選擇地址。 不是選擇優惠券的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.