首页 > 解决方案 > 使用本机查询时,@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";
    }

标签: springspring-data-jpaspring-data

解决方案


推荐阅读