복붙노트

[SPRING] CrudRepository에서 사용자 지정 SQL 쿼리

SPRING

CrudRepository에서 사용자 지정 SQL 쿼리

나는 CrudRepository를 확장 내 저장소에 일부 SQL 쿼리를 실행하기 위해 노력하고있어. 나는 컨트롤러에 다음 코드를 :

@CrossOrigin(origins = "*")
    @GetMapping(path="/all")
    public @ResponseBody List<UserProjection> getAllRequestResponseRecords() {
        return userRequestResponseRepository.findAllProjectedBy() ;
    }

DAO를 코드는 다음과 같습니다 :

public interface UserRequestResponseRepository extends CrudRepository<UserRequestResponse, Integer> {
    //public static final String FIND_QUERY = "select user.u_httpstatus ,user.u_queryparam from UserRequestResponse user";
    public static final String FIND_QUERY = 
    "select new com.abc.datacollection.entity.UserRequestResponse(user.u_httpstatus ,user.u_queryparam) from UserRequestResponse user";
    @Query(value = FIND_QUERY)
    //public List<UserProjection> getAllRequestResponseRecords();
     List<UserProjection> findAllProjectedBy();

}

클래스는 다음과 같습니다

import java.sql.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity // This tells Hibernate to make a table out of this class
public class UserRequestResponse {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private String u_httpstatus;

    private String u_error_message;

    private String u_queryparam;

    public UserRequestResponse(String u_httpstatus, String u_queryparam) {
        this.u_httpstatus = u_httpstatus;
        this.u_queryparam = u_queryparam;
    }


    public String getU_httpstatus() {
        return u_httpstatus;
    }

    public void setU_httpstatus(String u_httpstatus) {
        this.u_httpstatus = u_httpstatus;
    }

    public String getU_error_message() {
        return u_error_message;
    }

    public void setU_error_message(String u_error_message) {
        this.u_error_message = u_error_message;
    }

    public String getU_queryparam() {
        return u_queryparam;
    }

    public void setU_queryparam(String u_queryparam) {
        this.u_queryparam = u_queryparam;
    }


}

투사는 다음과 같습니다

public interface UserProjection {
    String getU_httpstatus();
    String getU_queryparam();

}

나는 (이 같은)처럼 쿼리를 추가 할 수있는 방법에 대한 혼란 스러워요 :

select u_type,count(u_type) from u_user_click_data group by u_type

어떻게 투사를 변경하고 기타 필요한 변화가 무엇을합니까?

해결법

  1. ==============================

    1.아래로 DAO를 변경할 수 있으며,이 작업을해야합니다.

    아래로 DAO를 변경할 수 있으며,이 작업을해야합니다.

    public interface UserRequestResponseRepository extends CrudRepository<UserRequestResponse, Integer> {
    public static final String FIND_QUERY = 
    "select new com.abc.datacollection.entity.UserRequestResponse(user.u_httpstatus ,user.u_queryparam, COUNT(user.u_type)) from UserRequestResponse user GROUP BY user.u_type";
    @Query(value = FIND_QUERY)
    //public List<UserProjection> getAllRequestResponseRecords();
     List<UserProjection> findAllProjectedBy();
    

    }

    빈 클래스 생성자는 전달 매개 변수가 있어야합니다 확인하십시오.

    쿼리가 유효 JPA 쿼리 (여기)인지 확인합니다.

  2. from https://stackoverflow.com/questions/58215972/custom-sql-queries-in-crudrepository by cc-by-sa and MIT license