0 امتیاز
قبل در برنامه نویسی توسط (7.2هزار امتیاز)
ویرایش شده قبل توسط

چگونه می توان نتایج یک لیست یک به چند را به صورت پویا فیلتر کرد؟

دو جدول داریم، برای مثال جوایز و جوایز انتخاب شده.

جوایز رابطه یک به چند با جوایز انتخاب شده دارد، یعنی:

    @OneToMany(fetch = FetchType.EAGER)
    @JoinColumn(name = "PRIZE_ID")
    private List<PrizeRequest> prizeRequests;

حال میخواهم نتایجی که در لیست نمایش داده می شود فیلتر شود، یعنی فقط انتخاب های کاربر لاگین کرده نمایش داده شود.

در Hibernate این کار توسط @Where ممکن است که آن هم استاتیک است!

آیا راهی در JPA وجود دارد؟

قبل توسط (1.1هزار امتیاز)
hibernate jpa که @Where داره.
قبل توسط (7.2هزار امتیاز)
+1
من هم در متن سوال خودم ذکر کرده ام! دنبال راهی از طریق JPA می گشتم که گویا وجود ندارد. یعنی مستقل از implementation بوده و specification استاندارد باشد.

1 پاسخ

+1 امتیاز
قبل توسط (7.2هزار امتیاز)
ویرایش شده قبل توسط

برای انجام این کار هیچ راهی (نه داینامیک و نه استاتیک) در 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);

 

سوالات مشابه

0 امتیاز
1 پاسخ 427 بازدید
+5 امتیاز
1 پاسخ 4.2هزار بازدید
+2 امتیاز
1 پاسخ 496 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط java_ (778 امتیاز)
+1 امتیاز
1 پاسخ 963 بازدید
سوال شده 4 سال قبل در برنامه نویسی توسط masoud shahhosseini_ (45 امتیاز)
0 امتیاز
3 پاسخ 762 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط یوری (426 امتیاز)
+1 امتیاز
3 پاسخ 1.5هزار بازدید
0 امتیاز
1 پاسخ 371 بازدید
0 امتیاز
0 پاسخ 617 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
0 پاسخ 325 بازدید
0 امتیاز
2 پاسخ 656 بازدید
...