Пользовательские SQL-запросы в CrudRepository - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь выполнить несколько SQL-запросов в моем репозитории, который расширяет CrudRepository. У меня есть следующий код в контроллере:

@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 голос
/ 03 октября 2019

Вы можете изменить 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 ( здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...