【问题标题】:QueryException: Not all named parameters have been set: [Deactivated]QueryException:未设置所有命名参数:[停用]
【发布时间】:2013-05-16 07:42:11
【问题描述】:

我尝试在 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;
    }
}

【问题讨论】:

  • 好吧,你在代码中的哪个位置填写参数Deactivated
  • 它来自导入 com.uzzz.enums.DStateEnum
  • 真的吗?如何?从未听说过这样的import 运算符功能。
  • 为 DStateEnum 添加了代码

标签: java hibernate jpa spring-data


【解决方案1】:

查询方法定义有很多问题:

  1. 您不能混合和匹配序数参数和命名参数。您要么需要去?1?2,要么为?1 取一个名字。
  2. 您需要为方法签名中的两个占位符提供参数。因此,由于您没有将任何内容通过管道传递到 :Description 的方法中,Spring Data 将无法将其绑定到查询(应该怎么做?)。

【讨论】:

    【解决方案2】:

    您的查询中有一个名为:Deactivatednamed parameter 尚未被赋予值。

    我对@Query 注释不太熟悉,但在我看来,您在方法中只提供了“id”值而不是“状态”值。您要么需要传入“:Deactivated”命名参数,要么将其替换为固定值。

    【讨论】:

      猜你喜欢
      • 2021-04-05
      • 1970-01-01
      • 2021-08-03
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      相关资源
      最近更新 更多