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 پاسخ 404 بازدید
+5 امتیاز
1 پاسخ 4.1هزار بازدید
+2 امتیاز
1 پاسخ 469 بازدید
سوال شده 9 سال قبل در برنامه نویسی توسط java_ (778 امتیاز)
+1 امتیاز
1 پاسخ 886 بازدید
سوال شده 4 سال قبل در برنامه نویسی توسط masoud shahhosseini_ (45 امتیاز)
0 امتیاز
3 پاسخ 681 بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط یوری (426 امتیاز)
+1 امتیاز
3 پاسخ 1.3هزار بازدید
0 امتیاز
1 پاسخ 354 بازدید
0 امتیاز
0 پاسخ 600 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
0 پاسخ 302 بازدید
0 امتیاز
2 پاسخ 585 بازدید
...