У меня есть отношение многие ко многим от сущности к себе.
@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;
// ...
}
Следующий запрос предоставит мне все услуги продавца, учитывая его идентификатор.
SELECT s FROM Service s WHERE s.merchantId = :merchantId ORDER BY s.name ASC
Если у этого торговца есть субторговцы, как я могу также включить услуги каждого субмерчанта в результаты?