I have to fetch the number of order requests arrived in last 2 hours in a sql server table: ORDER_REQUEST group by order origin id using data_jpa

I have to fetch the number of order requests arrived in last 2 hours in a sql server table: ORDER_REQUEST group by order origin id using data_jpa.

I have tried various ways to achieve this using native query in data jpa but getting some exceptions. Can someone help me figure out my mistake?

ORDER REQUEST entity class:

package com.accurate.metric.entity;

import java.sql.Date;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(catalog="ABCNEW_DEV", schema="dbo", name = "orderRequest")
public class OrderRequest {

    @Column(name="or_id")
    @Id
    private int id;

    @Column(name="or_oo_id")
    private int orderOriginId;

    @Column(name="or_orderdate")
    private Date orOrderDate;

    @Override
    public String toString() {
        return "OrderRequest [id=" + id + ", orderOriginId=" + orderOriginId + "]";
    }


}

OrderCount DTO class

package com.accurate.metric.entity;

public class OrderCount {

    private int orderOriginId;

    private int count;

    public OrderCount(int orderOriginId, int count) {
        this.orderOriginId = orderOriginId;
        this.count = count;
    }
}

Repository class and the native query

package com.accurate.metric.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import com.accurate.metric.entity.OrderCount;
import com.accurate.metric.entity.OrderOrigin;

@Repository
public interface OrderVolumeMetricDao extends JpaRepository<OrderOrigin, Integer>{

    @Query("SELECT new com.accurate.metric.entity.OrderCount(o.orderOriginId, COUNT(o)) " 
            + "FROM OrderRequest o " 
            + "WHERE o.orOrderDate BETWEEN DATEADD('HOUR', -2, CURRENT_TIMESTAMP)      AND CURRENT_TIMESTAMP "
            + "GROUP BY o.orderOriginId "
            + "ORDER BY o.orderOriginId")
    public List<OrderCount> findCountByOoIdAndDateRange();
}

Upvotes: 0

Views: 15

Answers (0)

Related Questions