برای انجام این کار هیچ راهی (نه داینامیک و نه استاتیک) در JPA وجود ندارد ، اما راه فیلتر کردن لیست یک به چند در هایبرنت و در زمان اجرا استفاده از @Filter در بالای لیست است.
برای این کار باید بالای جدول مرجع که اینجا PrizeRequest است ابتدا فیلتر را تعریف کنید:
@Table
@FilterDef(name = "forCustomer", parameters = @ParamDef(name = "customerId", type = "long"))
public class PrizeRequest {
سپس کد مبدا را به اینگونه تغییر دهید:
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "PRIZE_ID")
@Filter(name="forCustomer", condition=":customerId = customer_id")
private List<PrizeRequest> prizeRequests;
برای استفاده کافی است قبل از اجرای کوئری فیلتر را مقدار دهی کنید:
Session session = entityManager.unwrap(Session.class);
session.enableFilter("forCustomer").setParameter("customerId",customerId);