я использую данные весны 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";
}