簡體   English   中英

JPA:如何在多對多關系中給定另一個實體的ID來獲取一個實體的子代?

[英]JPA: How to fetch one entity's children given ID of other entity in many-to-many relationship?

從實體到自身,我與多對多的關系。

@Entity
@Table(name = "MERCHANTS")
public class Merchant {

  @Id
  @GeneratedValue
  private long id;

  @OneToMany(mappedBy = "merchant", fetch = FetchType.EAGER)
  @Fetch(FetchMode.SELECT)
  private List<Service> services;

  @ManyToMany(cascade = CascadeType.ALL)
  @JoinTable(name = "SUB_MERCHANTS", joinColumns = { @JoinColumn(name = "merchant_id") }, inverseJoinColumns = { @JoinColumn(name = "submerchant_id") })
  private final Set<Merchant> submerchants = new HashSet<>();

  @ManyToMany(mappedBy = "submerchants")
  private final Set<Merchant> merchants = new HashSet<>();

}

換句話說,商人可以擁有許多子商人。 每個商人可以具有零個,一個或多個服務。

@Entity
@Table(name = "SERVICES")
public class Service {

  @Id
  @GeneratedValue
  private long id;

  @ManyToOne
  @JoinColumn(name = "merchant_id")
  private Merchant merchant;

  // ...

}

以下查詢將為我提供該商戶ID的所有商戶服務。

SELECT s FROM Service s WHERE s.merchantId = :merchantId ORDER BY s.name ASC

如果那個商人有子商家,我如何在結果中包括每個子商家的服務?

此HQL查詢應返回所需的結果:

SELECT s from Service s where s.id in 
(SELECT sm_s.id FROM Merchant m JOIN m.submerchants sm JOIN sm.services sm_s WHERE m.id = :merchantId) 
or s.id in 
(select ms.id from Merchant m2 JOIN m2.services ms WHERE m2.id = :merchantId)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM