QueryException:并未设置所有命名参数:[Deactivated]

时间:2013-05-16 07:42:11

标签: java hibernate jpa spring-data

我正在尝试在jqp查询中使用枚举,但收到错误

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);

如何解决此问题?

这里是DStateEnum.java

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;
    }
}

2 个答案:

答案 0 :(得分:2)

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

  1. 您不能混合和匹配序数参数和命名参数。您需要转到?1?2,或者为?1找到一个名称。
  2. 您需要在方法签名中为两个占位符提供参数。因此,当您不将任何内容传递给:Description的方法时,Spring Data将无法将其绑定到查询(它应该怎么做?)。

答案 1 :(得分:0)

您的查询中有一个名为:Deactivated的{​​{3}}尚未获得值。

我对@Query注释并不太熟悉,但我认为你只提供了“id”值,而不是你方法中的“state”值。您需要传入“:Deactivated”命名参数或将其替换为固定值。