私は以下の予想される結果を生成する必要があります。基本的には、特定の期間(週ごと、月ごとなど)に基づいて値を集計するクエリです。開始日と終了日を持つ日付フィルタがあり、すべての範囲の値を返す必要があります。存在しない場合は、0を返す必要があります。JPA期間クエリを処理する正しい方法は何ですか?
次の例では、開始日は '2015-08-02'と日付 '2015-08-23'で、期間は週のみです。 2週目には値はありませんが、値がゼロで返されることに注意してください。
この場合、JPAを使用してこれを実行する最良の方法は何ですか?私たちは一時テーブルを使用してこのテーブルで結果を結合して範囲全体の結果を得ることを考えていますが、JPAを使用して可能かどうかは分かりません。なぜなら、テーブルを作成し、
もう1つの方法として、データベースビューを作成してエンティティにマップする方法があります。上記の例で
、JPQLクエリは、そのようなものでなければなりません:
@Query("select status, sum(totalInvoice), week from Invoice where " +
"left join TempTable as tt..." + <-- TEMP TABLE OR VIEW TO GET THE PERIODS
"issuer.id = :issuerId and type = :type and (:recipientId is null or recipient.id = :recipientId) and " +
"status in ('ISSUED', 'PAID') " +
"group by status")
別のオプションは、ストアドプロシージャを使用することですが、彼らはJPAで実装するのは難しいように見えると私は考えていません彼らが必要であること。
期待される結果:
{
"code":"xxx",
"title":"This is the title of the first series"
"type":"PERIODIC",
"period":"WEEKLY", <-- PERIOD
"from":"2015-08-02",
"to":"2015-08-29",
"labels": ["2015-08-02", "2015-08-09", "2015-08-16", "2015-08-23"],
"tabelType": "TEXT",
"series":[
{
"code":"xxx",
"title":"This is the title of the first series"
"values":[10, 0, 13, 18] <- in this example, we don't have values for label "2015-08-09"
},
{
"code":"xxx",
"title":"This is the title of the second series"
"values":[10, 0, 13, 18] <- in this example, we don't have values for label "2015-08-09"
}
]
}
、これは一般的に[ 'SELECT ... generate_series(timestamp_from、timestamp_to、間隔)などからint_start登録しようと行われていますあなたの_data.timestamp_col間のint_startとint_start +間隔 '](https://www.postgresql.org/docs/current/static/functions-srf.html)のあなたの_data.timestamp_colで、私はそれのJPAフレンドリーな方法を考えることはできません(他のネイティブクエリを使用するよりも)。 – pozs
@pozs、はい、JPAでこれを行う方法は最も難しい部分です。おそらくJPAエンティティにマップされたビューを使用することを考えていましたが、うまくいくかどうかわかりません。 –