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 پاسخ 522 بازدید
+5 امتیاز
1 پاسخ 4.4هزار بازدید
+2 امتیاز
1 پاسخ 592 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط java_ (778 امتیاز)
+1 امتیاز
1 پاسخ 1.1هزار بازدید
سوال شده 5 سال قبل در برنامه نویسی توسط masoud shahhosseini_ (45 امتیاز)
0 امتیاز
3 پاسخ 875 بازدید
سوال شده 6 سال قبل در برنامه نویسی توسط یوری (426 امتیاز)
+1 امتیاز
3 پاسخ 1.6هزار بازدید
0 امتیاز
1 پاسخ 465 بازدید
0 امتیاز
0 پاسخ 699 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
0 پاسخ 395 بازدید
0 امتیاز
2 پاسخ 812 بازدید
...