@Query не дает желаемого результата при использовании собственного запроса - PullRequest
1 голос
/ 18 июня 2019

я использую данные весны jpa в моем проекте

package com.mf.acrs.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Data
@Entity(name= "mv_garage_asset_mapping")
public class GarageAssetMapping implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 2535545189473989744L;

    @Id
    @Column(name="GARAGE_CODE")
    private String garageCode;

    @Column(name="GARAGE_NAME")
    private String garageName;

    @Column(name="GARAGE_ADDRESS")
    private String garageAddress;

    @Column(name="GARAGE_BRANCH")
    private String garageBranch;

    @Column(name="CONTRACT_NUMBER")
    private String contractNumber;
}

это мой объект сущности

package com.mf.acrs.repository;

import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import com.mf.acrs.model.GarageAssetMapping;

public interface GarageAssetMappingRepository extends JpaRepository<GarageAssetMapping, String> {

//  @Query(name="select u.CONTRACT_NUMBER from mv_garage_asset_mapping u where u.GARAGE_CODE = ?1", nativeQuery = true) //**QUERY 1**

    @Query("select u.contractNumber from mv_garage_asset_mapping u where u.garageCode = ?1") // **QUERY 2**
    List<String> findByGarageCode(String garageCode);
}

это мой интерфейс хранилища

когда я использую запрос QUERY 1 в моем приложении, запрос, запускаемый данными весны jpa, равен

Hibernate: выберите garageasse0_.garage_code в garage_code1_2_, garageasse0_.contract_number в contract_number2_2_, garageasse0_.garage_address в garage_address3_2_, garageasse0_.garage_branch в garage_branch4_2_, garageasse0_.garage_name в garage_name5_2_ из mv_garage_asset_mapping garageasse0_ где garageasse0_.garage_code =

но когда я использую QUERY 2, запрос запускается

Гибернация: выберите garageasse0_.contract_number как col_0_0_ из mv_garage_asset_mapping garageasse0_, где garageasse0_.garage_code =?

QUERY 2 дает мне желаемый результат. но мой вопрос заключается в том, почему Spring Data JPA запускает неправильный запрос в 1-м случае. в QUERY 1 hibernate пытается извлечь все поля данных, несмотря на то, что я явно написал в запросе, что хочу получить только одно поле.

Какую ошибку я делаю в этом случае?

Метод, определенный в контроллере, который вызывает метод, приведен ниже:

@PostMapping("/searchAssetsAjax")
    @ResponseBody
    public String searchAssetsAjax(@RequestBody SearchAssetData searchAssetData) throws IOException{
        System.out.println("iam in the searchAssetsAjax "+searchAssetData);
        System.out.println("iam in the searchAssetsAjax "+searchAssetData.toString());
//      System.out.println("throwing exceptions" ); throw new IOException();
        System.out.println("hitting the db "+searchAssetData.getGarageCode());
//      List<String> contractNums = garageAssetMapRepository.findContractNumberByGarageCode(searchAssetData.getGarageCode());

        List<String> contractNums = garageAssetMapRepository.findByGarageCode(searchAssetData.getGarageCode());
        System.out.println("@@@@@@@@@@@@contract num size is "+contractNums.size());

        for(String contract: contractNums) {
            System.out.println("contract nums are "+contract);
        }
        return "success";
    }
...