Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

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

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

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へ
にほんブログ村