EJB 3.0(Public Draft)入門記 Java Persistence API Chapter4 その9

EJB QL の ORDER BY節についてです。
EJB QLを使って動かしてみますが、エンティティの定義はChapter 4 その4で作成したものを使います。

4.9 ORDER BY Clause

ORDER BYにはステートフィールドをあらわすパス式だけが指定できるそうです。

EJB QLでORDER BY節が使われる場合、SELECT節の各要素は次のうちどれかにならなければいけないというルールがあるようです

  • 識別変数 x (OBJECT(x)とすることも可)
  • 単一の関連を表すパス式 (「単一の」というのはコレクションじゃないということを言っているのだと思います、たぶん)
  • ステートフィールドをあらわすパス式

1番目と2番目の場合、ORDER BYに指定する値はSELECTで返されるエンティティの順序付け可能なステートフィールドでなければいけないそうです。3番目の場合、ORDER BYに指定しする値はSELECT節に指定するものと同じエンティティの同じステートフィールドでなければいけないそうです。それぞれの例を順番に示してみます。

select p from Product p order by p.name
select l from Order o inner join o.lineItems l order by l.quantity
select p.name from Product p order by p.name

ORDER BY節にはキーワードASCやDESCが指定できるそうです。SQLと同じですね。
NULLがあるときの順序ですがこれもSQLと同じで、すべてのNULLが最初にくるか最後にくるかになるそうです。どっちになるかは決められていないとのことですが、これはデータベースに依存するということでしょうか?データベースによってはpersistence.xmlとかで指定できるかも?