1

この SQL ステートメントを @NamedQuery に変換するインテリジェントな方法を探しています。

SELECT MONTH(dateField), sum(value) FROM mydb.records where status ='paid' group by MONTH(dateField) order by MONTH(dateField);

Record (Hibernate) という JPA @Entity があります。これは、毎日作成されるシステム内のすべての請求書の詳細を示します。毎月たくさんのエントリーがあります。各レコードには、支払い済み、期限切れ、値、および顧客の名前と住所などの他の多くの情報などのステータスがあります.

上記のステートメントは基本的に、すべてのデータを月ごとに要約し、1 月に支払われたすべての請求書、2 月に支払われたすべての請求書などの要約を提供して、月ごとに支払われたすべての請求書の値を合計します.....結果は何かのように見えますお気に入り:

datefield    value
1            4500
2            5500
3            5669

JPA @NamedQuery を使用してこれを行うと考えることができる唯一の方法は、テーブル内のステータスが「pai」であるすべてのレコードを選択し、Java コードを使用してソート、順序付け、追加をかなり遅くて醜い方法で行うことです。 ! @NamedQuery でこれを行うことができる賢い方法はありますか?

ありがとう

4

1 に答える 1

1

MONTH()JPA 仕様で定義されている標準の JPQL 関数ではありませんが、別の方法があります。

データベースの月関数を活用するデータベースのビューを作成します。

create view MONTLY_REVENUE as
    SELECT MONTH(dateField), 
       sum(value) 
    FROM mydb.records 
    where status ='paid' 
    group by MONTH(dateField) 
    order by MONTH(dateField);

次に、JPA を使用して他のテーブルから作成する場合と同様に、このエンティティを作成します。ビューから選択することはできますが、保存して更新することはできません。ただし、集計を使用することはとにかく好きではないためです。

于 2013-10-03T09:44:59.117 に答える