読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

DataTableにEntityのリストを直接紐づけた際の表示順制御

JPA PrimeFaces DataTable

だいぶしょうもないですが、少しだけ迷いが発生したのでメモ(^^;

PrimeFacesで一覧を作る際、DataTableのvalue属性にリストをEL式で紐づけます。
通常、検索系画面などではJPQLでDBから引く際にORDER BYするので、初期の表示順は特に問題になりません。

ただ検索系以外の画面で、非常に単純な一覧(1つのエンティティで表示できてしまうような)の場合には、とある親Entityの子供コレクションを直接紐づけることなんかもあると思います。

具体的には、ParentEntityクラスのフィールドに以下のような定義がある場合

@OneToMany(cascade = CascadeType.ALL, mappedBy = "Parent")
private List<Child> children;

そして、datatableで以下のように定義をするケースです。

<p:dataTable id="dtXxx" var="item" value="#{xxxBean.parent.children}" ...

この場合に、一覧表示での初期表示順を定義する必要が出た場合、EntityクラスにComparableインタフェースを付けてcompareToを定義するのか…?と一瞬思ったのですが、金魚本にある@OrderByを利用して

@OneToMany(cascade = CascadeType.ALL, mappedBy = "Parent")
@OrderBy("childId ASC")
private List<Child> children;

のようにかけば問題ありませんでした。上記例ではChildのEntityが属性としてchildIdを持っていて、その昇順、という意味になります。

危うくEntityに余計な実装するところだった(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村