Java QueryException:未设置所有命名参数:[已停用]

Java QueryException:未设置所有命名参数:[已停用],java,hibernate,jpa,spring-data,Java,Hibernate,Jpa,Spring Data,我试图在jqp查询中使用enum,但出现错误 org.hibernate.QueryException: Not all named parameters have been set: [Deactivated] 这是我的密码 import com.uzzz.enums.DStateEnum; @Enumerated(EnumType.STRING) @Query("SELECT dlCode FROM GDETable WHERE d.Id = ?1 AND d.dState.state &

我试图在jqp查询中使用enum,但出现错误

org.hibernate.QueryException: Not all named parameters have been set: [Deactivated]
这是我的密码

import com.uzzz.enums.DStateEnum;
@Enumerated(EnumType.STRING)
@Query("SELECT dlCode FROM GDETable WHERE d.Id = ?1 AND d.dState.state <> :Deactivated")
List<String> findAllDsCodeExcludingDeactivatedById(Integer Id);
您的查询中有一个名为
:Deactivated
的未给定值


我对@Query注释不太熟悉,但在我看来,您在方法中只提供了“id”值,而没有提供“state”值。您需要传入“:Deactivated”命名参数或用固定值替换它。

查询方法定义存在多个问题:

  • 不能混合和匹配序数参数和命名参数。您需要转到
    ?1
    ?2
    ,或者为
    ?1
    命名
  • 您需要为方法签名中的两个占位符提供参数。因此,由于没有将任何内容导入到
    :Description
    的方法中,Spring数据将无法将其绑定到查询(它应该如何做?)

  • 那么,您在代码中的什么地方填充参数
    Deactivated
    ?它来自import com.uzzz.enums.DStateEnumreally?怎样?从未听说过此类
    import
    operator功能。为dstatenum添加了代码
    public enum DStateEnum {
    
        Cancelled("Cancelled"),
        Active("Active"),
        Paused("Paused"),
        Deactivated("Deactivated");
    
        private DStateEnum(final String name){
            this.name = name;
        }
    
        private String name;
    
        public String getName() {
            return name;
        }
    
        @Override
        public String toString() {
            return name;
        }
    
        public static DStateEnum fromString(String text) {
            if (text != null) {
                for (DStateEnum b : DStateEnum.values()) {
                    if (text.equalsIgnoreCase(b.getName())) {
                        return b;
                    }
                }
            }
            return null;
        }
    }