1

( Hibernate と JPA2 Criteria Builder を使用して) エンティティ メンバーではなくメソッドの結果で注文することは可能ですか?

public class X {
    protected X() {}
    public String member;
    public String getEvaluatedValue() { // order by
        return "a status calculated with various members";
    }
}

私が達成したいのは、の結果による順序ですgetEvaluatedValue()。それは可能ですか?

@Formular は使っていませんが、

EntityManager em = ...;
QueryBuilder builder = em.getQueryBuilder();
SomeQueryClass query = builder.createQuery(MyTargetClass.class);
query.orderBy(builder.asc(... some code...));

私はプレーンな JPA2 ですが、確かに動的データで注文する機会はありません。しかし、if-else などのステートメント (QueryBuilder で定義) を使用して order-by ブロックを指定することは許されるかもしれませんね。

4

2 に答える 2

0

それが可能かどうかはわかりません (属性が一時的である場合、つまりデータベースに表現がない場合、SQL の結果はどうなるでしょうか?) しかし、もっと重要なのは、 と による順序付けの違いは何でしょう"some test " + membermember? ほんの一例かもしれませんが…

于 2010-06-07T16:51:35.090 に答える
0

この理由により、それは不可能のようです。クエリが SQL レイヤーで実行されると、「EvaluatedValue」フィールドは計算されません。後でのみ入力されます(正確にはわかりませんが、エンティティがLAZYモードを使用するかどうかに依存する場合があります)。JPA Query オブジェクトは、SQL、つまりデータベースにあるものと密接に結びついています。

おそらく、getResultList() でソートされていない結果を取得し、手動でソートします。

EvaluatedValue を Comparable を実装する型にする: ここを参照

于 2010-10-04T15:17:05.067 に答える