spring - 使用本机查询时,@Query 没有给出想要的结果
问题描述
我在我的项目中使用 spring data 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 时,spring data jpa 触发的查询是
休眠:选择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_mappinggarageasse0_ 其中garageasse0_.garage_code=?
但是当我使用 QUERY 2 时,触发的查询是
休眠:从 mv_garage_asset_mapping Garageasse0_ 中选择garageasse0_.contract_number 作为 col_0_0_ wheregarageasse0_.garage_code=?
QUERY 2 给了我想要的结果。但我的问题是为什么 spring data jpa 在第一种情况下会触发不正确的查询。在 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";
}
解决方案
推荐阅读
- r - 如何在具有自由类型支持的 R (Termux) 上安装 Cairo
- google-sheets - 多张表查询
- node.js - nodejs-request获取但在浏览器或curl中工作时没有正文内容
- php - 错误:文件格式或文件扩展名无效。验证文件没有损坏
- bash - 如何在指向另一个目录的目录中查找符号链接
- python - Elasticsearch 安装在我的服务器中,我正在运行 docker-compse 并收到错误“ConnectionRefusedError: [Errno 111] Connection denied”
- java - 将字符序列转换为字符串的流的替代方法
- ios - 间隔一段时间后如何在后台打开应用程序
- javascript - PHP数组中的JS变量值没有带来整个数组值
- javascript - 在 .then 处理程序中返回 Firebase 承诺时,ReactJS 警告“无法对未安装的组件执行反应状态更新”