جاوا و تکنولوژی های آن

java programming language

در این وبلاگ به بررسی نکات موجود در جاوا و تکنولوژی های آن می پردازیم

طبقه بندی موضوعی


در این بخش راه های sort کردن با JPA را بررسی خواهیم کرد 



روش JQL API :


با کمک دستور Order By

String jql ="Select f from Foo as f order by f.id";
Query query = entityManager.createQuery (jql);


با این کوئری دستور SQL زیر ساخته میشود :


Hibernate: select foo0_.id as id1_4_, foo0_.name as name2_4_ 
    from Foo foo0_ order by foo0_.id


* بصورت پیش فرض نوع Order از نوع Ascending است 



مرتب سازی با Order By و Descending :


String jql = "Select f from Foo as f order by f.id desc";
Query sortQuery = entityManager.createQuery(jql);


کوئری ساخته شده :

Hibernate: select foo0_.id as id1_4_, foo0_.name as name2_4_ 
    from Foo foo0_ order by foo0_.id desc


مرتب سازی بر اساس Order By و ترکیب Ascending و Descending :


String jql ="Select f from Foo as f order by f.name asc, f.id desc";
Query sortQuery = entityManager.createQuery(jql);


کوئری ساخته شده :


Hibernate: select foo0_.id as id1_4_, foo0_.name as name2_4_ 
    from Foo foo0_ order by foo0_.name asc, foo0_.id desc


مرتب سازی بر اساس الویت با مقادیر Null :


پیش فرض الویت مرتب سازی مقادیر Null در هر دیتابیسی متفاوت است و ما میتوانیم در HQL با NULLS FIRST و NULLS LAST آنرا مشخص کنیم 

در مثال زیر مرتب سازی بر اساس name نزولی و قرار دادن مقادیر NULL در انتها :

Query sortQuery = entityManager.createQuery
    ("Select f from Foo as f order by f.name desc NULLS LAST");

کوئری ساخته شده :

Hibernate: select foo0_.id as id1_4_, foo0_.BAR_ID as BAR_ID2_4_, 
    foo0_.bar_Id as bar_Id2_4_, foo0_.name as name3_4_,from Foo foo0_ order
    by case when foo0_.name is null then 1 else 0 end, foo0_.name desc





مرتب سازی روابط One To Many :


فرض کنید کلاس Bar میتواند مجموعه ای از کلاس Foo داشته باشد و در کوئری میخواهیم ابتدا نتایج Bar مرتب شوند و بعد مجموعه Foo آنها مرتب شوند 


ابتدا به مجموعه Foo در کلاس Bar با استفاده از OrderBy@ نوع مرتب سازی و فیلد مورد نظر را مشخص میکنیم :

استفاده از این annotation اختیاری است و در این مورد چون هر بار نیاز داریم که این نوع مرتب سازی انجام شود یکبار انرا ست میکنیم 


@OrderBy("name ASC")
List <Foo> fooList;


و بعد کوئری را با Order By میزنیم :


String jql = "Select b from Bar as b order by b.id";
Query barQuery = entityManager.createQuery(jql);
List<Bar> barList = barQuery.getResultList();



کوئری ساخته شده :


Hibernate: select bar0_.id as id1_0_, bar0_.name as name2_0_ from Bar bar0_ order by bar0_.id
 
Hibernate: 
select foolist0_.BAR_ID as BAR_ID2_0_0_, foolist0_.id as id1_4_0_, 
foolist0_.id as id1_4_1_, foolist0_.BAR_ID as BAR_ID2_4_1_, 
foolist0_.bar_Id as bar_Id2_4_1_, foolist0_.name as name3_4_1_ 
from Foo foolist0_ 
where foolist0_.BAR_ID=? order by foolist0_.name asc





مرتب سازی با JPA Criteria :


JPA Criteria برای مرتب سازی متد orderBy را ارئه کرده است که میتوان در پارامتر های آن نوع نزولی و صعودی و فیلد مورد نظر را تعیین کرد :


CriteriaQuery<Foo> criteriaQuery = criteriaBuilder.createQuery(Foo.class);
Root<Foo> from = criteriaQuery.from(Foo.class);
CriteriaQuery<Foo> select = criteriaQuery.select(from);
criteriaQuery.orderBy(criteriaBuilder.asc(from.get("name")));


جایی که نام فیلد را میگیرد که در اینجا name است به حروف بزرگ و کوچک حساس است 

با کد بالا HQL زیر ساخته میشود :

Hibernate: select foo0_.id as id1_4_, foo0_.name as name2_4_
    from Foo foo0_ order by foo0_.name asc



مرتب سازی با JPA Criteria وقتی بیشتر از یک فیلد نیاز داشتیم :


CriteriaQuery<Foo> criteriaQuery = criteriaBuilder.createQuery(Foo.class);
Root<Foo> from = criteriaQuery.from(Foo.class); 
CriteriaQuery<Foo> select = criteriaQuery.select(from); 
criteriaQuery.orderBy(criteriaBuilder.asc(from.get("name")),
    criteriaBuilder.desc(from.get("id")));


HQL ساخته شده :


Hibernate: select foo0_.id as id1_4_, foo0_.name as name2_4_ 
    from Foo foo0_ order by foo0_.name asc, foo0_.id desc








نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی