だいぶしょうもないですが、少しだけ迷いが発生したのでメモ(^^;
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に余計な実装するところだった(^^;