在实体中使用Enum时进行查询的问题

Luc*_*uke 72 java jpa java-ee

我在Question实体中有以下内容:

@NamedQuery(name = "Question.allApproved",
    query = "SELECT q FROM Question q WHERE q.status = 'APPROVED'")
Run Code Online (Sandbox Code Playgroud)

@Enumerated(EnumType.STRING)
private Status status;

// usual accessors
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

异常说明:编译查询时出错[Question.countApproved:SELECT COUNT(q) FROM Question q WHERE q.status = 'APPROVED'],第1行,第47列:无效的枚举等于表达式,无法将类型 [myCompnay.application.Status]的枚举值与非枚举值类型进行比较[java.lang.String].at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:501)

我该如何解决?

Pio*_*cki 133

我认为你应该使用你的(完全限定的)Status枚举而不是文字值,所以像这样:(假设你的Status枚举在com.myexample包中)

@NamedQuery(name = "Question.allApproved", 
            query = "SELECT q 
                     FROM Question q 
                     WHERE q.status = com.myexample.Status.APPROVED").
Run Code Online (Sandbox Code Playgroud)

  • 旁注:当枚举是实体的内部类时,它不起作用。如果这对您不起作用,请确保枚举是它自己的文件! (11认同)
  • 这个“完全合格”比我想象的更重要。 (3认同)
  • 你在谈论什么`@ Query`注释? (2认同)
  • 这似乎在CrudRepositories中不起作用 (2认同)