использование спецификации в запросах JPA при весенней загрузке - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть имя таблицы high_utilization ,

со столбцами,

varchar name_utilization, 
float utilization, 
varchar monitoring_tool, 
varchar location, 
varchar device_type,
varchar environment, 
varchar Org_filter_1, 
varchar Org_filter_2, 
varchar Domain_filter_1, 
varchar Domain_filter_2;

Но в моем выводе в формате JSON мне нужны только два поля name_utilization, utilization

Я записываю свой файл репозитория, как показано ниже

public interface high_utilizationRepo extends CrudRepository<high_utilization,Integer> {
    @Query(value="select a.name_utilization as 'name_utilization',a.utilization as 'utilization' "
            + "  from high_utilization a  WHERE   a.monitoring_tool in (:monitoring_tool) "
            + "AND a.location in (:location)  AND a.device_type in (:device_type) AND a.environment in (:environment) "
            + "AND  a.Org_filter_1 in (:Org_filter_1) AND  a.Org_filter_2 in (:Org_filter_2) AND "
            + "a.Domain_filter_1 in (:Domain_filter_1) AND a.Domain_filter_2 in (:Domain_filter_2) "
            + " order by utilization desc limit 5",nativeQuery=true)
 String[] info_of_high_utilization_with_params(@Param("monitoring_tool") List<String>
    monitoring_tool,
            @Param("location") List<String> location, @Param("device_type") List<String> device_type,
            @Param("environment") List<String> environment,@Param("Org_filter_1") List<String> Org_filter_1,
            @Param("Org_filter_2") List<String> Org_filter_2,@Param("Domain_filter_1") List<String> Domain_filter_1, 
            @Param("Domain_filter_2") List<String> Domain_filter_2);

Я знаю, что могу использовать findAll(Specification <high_utilization>), но я хочу использовать эту спецификацию в моей собственной определенной функции info_of_high_utilization_with__params, которая имеет 8 параметров.

Как мне записать мою программу?

1 Ответ

0 голосов
/ 14 февраля 2020

Как вы видите, когда вы выполняете пользовательский запрос, он возвращает массив объектов (вот строка). Таким образом, вам нужно вручную настроить на основе ваших требований.

  • Обычно мы используем DTO для обработки json запроса в соответствии с требованиями пользователя. Поэтому я предлагаю вам использовать следующий способ.

Пример:

DTO:

@Data
public class TempDTO {
  private String email;
  private String phno;
}

Репозиторий:

@Query(nativeQuery = true, value = "SELECT email, phone_no FROM ec_user")
List<String[]> findEmailAndPhoneNoBasedOnUsername();

Служба:

  @Override
  public List<TempDTO> getEmailAndPhoneNo(String username) {
    List<TempDTO> result = new ArrayList<>();
    List<String[]> dataList = userRepository.findEmailAndPhoneNoBasedOnUsername();
    for (String[] strArray : dataList) {
      TempDTO tempDTO = new TempDTO();
      tempDTO.setEmail(strArray[0]);
      tempDTO.setPhno(strArray[1]);
      result.add(tempDTO);
    }
    return result;
  }

Использование потокового API для службы.

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