首页 > 解决方案 > 我正在调用 init 方法失败;嵌套异常是存储库类方法调用上的 java.lang.IllegalArgumentException

问题描述

开始服务时出现以下异常

... org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“levelDetailsS​​ervice”的bean时出错:通过字段“storeRepo”表达的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“storeRepo”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: Validation failed for query for public abstract java.util.List com.tcs.opt.promotion.masterservice.dao.repo.StoreRepo.getStoreList(java.lang.Integer,java.util.列表,java.lang.Character)!...

这是我在服务层中对存储库的方法调用

List<Object[]> storeObjs=storeRepo.getStoreList(salesOrgId,storeRequestDTO.getClassId(),'Y');

这里 salesOrgId 是整数,storeRequestDTO.getClassId() 是整数列表

回购类

@Repository
public interface StoreRepo extends JpaRepository<StoreEntity, Integer> {
    

    @Query("select str.store_id,str.store_number,str.store_name,str.city,str.state from StoreEntity str left outer join master.promo_market_store pstr "
            + "on str.store_id=pstr.store_id where str.salesOrgID=:salesOrgID and pstr.level_id in (:levelIdList) and str.activeF=:activeF")
    List<Object[]> getStoreList(@Param("salesOrgID") Integer salesOrgID,@Param("levelIdList") List<Integer> levelIdList,@Param("activeF") Character activeF);

}

实体类

@Entity
@Table(name=MasterQueryConstants.STORE_TBL,schema=MasterQueryConstants.MASTER_SCHEMA)
public class StoreEntity implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name="store_id")
    private Integer storeId;
    @Column(name="sales_org_id")
    private Integer salesOrgID;
    @Column(name="store_number")
    private Integer storeNumber;
    @Column(name="store_name")
    private String storeName;
    @Column(name="store_description")
    private String storeDescription;
    @Column(name="active_f")
    private Character activeF;
    @Column(name="city")
    private String city;
    @Column(name="state")
    private String state;
    
    
    public Integer getStoreId() {
        return storeId;
    }
    public void setStoreId(Integer storeId) {
        this.storeId = storeId;
    }
    public Integer getSalesOrgID() {
        return salesOrgID;
    }
    public void setSalesOrgID(Integer salesOrgID) {
        this.salesOrgID = salesOrgID;
    }
    public Integer getStoreNumber() {
        return storeNumber;
    }
    public void setStoreNumber(Integer storeNumber) {
        this.storeNumber = storeNumber;
    }
    public String getStoreName() {
        return storeName;
    }
    public void setStoreName(String storeName) {
        this.storeName = storeName;
    }
    public String getStoreDescription() {
        return storeDescription;
    }
    public void setStoreDescription(String storeDescription) {
        this.storeDescription = storeDescription;
    }
    public Character getActiveF() {
        return activeF;
    }
    public void setActiveF(Character activeF) {
        this.activeF = activeF;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    
    public StoreEntity()
    {
        /**
         * Default Constructor
         */
    }
}

请帮我解决这个问题,

标签: javaspring-data-jpamicroservices

解决方案


我会说这个错误意味着@Query 语法不正确。更多详细信息可能会出现在堆栈跟踪的下方,但在我看来,您可能在查询中混淆了列名和属性名。

您应该使用 Java 所知道的属性名称,而不是查询中的列名称。

所以,storeId而不是store_id. ETC


推荐阅读