1

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

2 回答 2

2

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

  1. 您不能混合和匹配序数参数和命名参数。你要么需要去?1?2要么想出一个名字?1
  2. 您需要为方法签名中的两个占位符提供参数。因此,由于您没有将任何内容传递到 for 的方法中:Description,Spring Data 将无法将其绑定到查询(它应该怎么做?)。
于 2013-05-16T13:30:27.130 回答
0

您的查询中有一个命名参数:Deactivated,该参数没有被赋予一个值。

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

于 2013-05-16T08:34:49.207 回答