아래에서 예상되는 결과를 생성해야합니다. 기본적으로 특정 기간 (매주, 월간 등)에 따라 값을 집계하는 쿼리입니다. 시작과 끝이있는 날짜 필터가 있으며 모든 범위의 값을 반환해야합니다. 존재하지 않으면 0을 반환해야합니다.JPA 기간 쿼리를 처리하는 올바른 방법은 무엇입니까?
아래 예에서 시작 날짜는 '2015-08-02'이고 날짜는 '2015-08-23'이고 기간은 WEEKLY입니다. 2 주째에는 값이 없지만 0 값이 반환되어야합니다.
그래서이 경우 JPA를 사용하여 가장 좋은 방법은 무엇입니까? 우리는 임시 테이블을 사용하여이 테이블로 결과를 결합하여 전체 범위에 대한 결과를 얻지 만, JPA를 사용하여이 작업을 수행 할 수 있는지 여부는 알지 못합니다. 왜냐하면 테이블을 만들고 조인 한 다음 임시 테이블을 삭제해야하기 때문입니다.
또 다른 옵션은 데이터베이스보기를 작성하고이를 엔티티에 맵핑하는 것입니다. 위의 경우
는 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, 간격)로부터 AS int_start 가입 :
나는 다음 클래스와 의미있는 무언가로이 결과를 설정 한 귀하의 데이터 _ 데이터 _tataestamp_col 사이 int_start 및 int_start + interval'] (https://www.postgresql.org/docs/current/static/functions-srf.html),하지만 JPA 친화적 인 방법으로 생각할 수 없다 (다른 네이티브 쿼리를 사용하는 것보다). – pozs
@pozs, 예, JPA에서이를 수행하는 방법은 가장 어려운 부분입니다. 아마도 JPA 엔티티에 매핑 된 뷰를 사용하려고 생각하고 있었지만 실제로 작동하는지 여부는 알 수 없습니다. –