web-dev-qa-db-ja.com

エンティティでEnumを使用するときにクエリを作成する際の問題

Questionエンティティには次のものがあります。

_@NamedQuery(name = "Question.allApproved",
    query = "SELECT q FROM Question q WHERE q.status = 'APPROVED'")
_

そして

_@Enumerated(EnumType.STRING)
private Status status;

// usual accessors
_

私はこの例外を受け取っています:

例外の説明:クエリのコンパイルエラー[Question.countApproved:SELECT COUNT(q) FROM Question q WHERE q.status = 'APPROVED']、行1、列47:無効な列挙型の等しい式、タイプ_[myCompnay.application.Status]_の列挙型の値をタイプの非列挙型の値と比較できません_[Java.lang.String]_。 org.Eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.Java:501)で

どうすれば修正できますか?

69
LuckyLuke

リテラル値の代わりに(完全修飾)Status enumを使用する必要があると思うので、次のようにします。(Status enumがcom.myexample パッケージ)

@NamedQuery(name = "Question.allApproved", 
            query = "SELECT q 
                     FROM Question q 
                     WHERE q.status = com.myexample.Status.APPROVED").
128
Piotr Nowicki