2012-02-17 11 views
1

データベースから順序付けられた要素のリストを取得しようとしました。私が理解するところでは、@orderByの注釈で十分です。収集目的の注文の目的は?

二つの場所に注釈を付けることが可能である:コレクション

@OrderBy 
@OneToMany(cascade = CascadeType.ALL, mappedBy = Entry.REPORT_PROP) 
private List<Entry> elements 

ゲッター

@OrderBy 
public List<Entry> getElements() 

問題イントロ
を表す

フィールドフィールドとゲッターの両方に注釈が付けられている場合、取得されたリストは正しく並べ替えられます。ただし、フィールドにのみ注釈が付いている場合、取得されたリストはデータベースの自然順序付けを使用しています。

質問
フィールドに注釈を付けるのは何ですか?もしそうでなければ、フィールドだけに注釈を付けることはなぜ可能ですか?

+0

上がらないのはなぜOrderBy( "fieldToUseWhenOrdering")を使用していますか?あなたはそれが動作するかどうか見ることができますか? – perissf

+0

私はそれを使っていましたが、@OrderByがデフォルトであるプライマリキーによる注文が必要だったので、違いはありませんでした。 – bbaja42

答えて

3

アノテーションをどこに置いても問題ありません。それは、

@OneToMany(...) 
private List<Entry> elements; 

は、リストがあなたのSQLデータベースは、おそらくいくつか注文した形でそれらを返します(任意の特定の順序なしで取得しますが、標準に従ってされていることを意味する必要があります:あなたは注釈を付ける方法に応じて、3例があるはずですそれがなければ完全に合法です)。

@OrderBy 
@OneToMany(...) 
private List<Entry> elements; 

は、主キー順のエントリを取得する必要があり、かつ

@OrderBy("fieldname asc") 
@OneToMany(...) 
private List<Entry> elements; 

は、次のJPQLステートメントに対応し、昇順でフィールド名が注文したエントリを取得する必要があります

"select e from Entry e ordered by fieldname asc" 
+0

答えがありがとうございましたが、問題は私の経験では注釈を置く場所が問題だったということです。もちろん、間違いをした可能性もあります。あなたの声明を確認するために、いくつかの参照を表示することができますか? – bbaja42

+0

http://jcp.org/aboutJava/communityprocess/final/jsr317/index.htmlのJSR-317では、11.1.38節で@OrderByアノテーションに@Target({メソッド、フィールド})が含まれていると指定できるため、いずれかの場所で。 http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html_single/にあるHibernateのドキュメントは同意しないでください。 – wallenborn

+0

参考になりました。 JSR-317では、GETTERメソッドに注釈を付けるための例だけがありますが、FIELD注釈の例はありません。 – bbaja42