2016-12-26 14 views
0

皆さんにメリークリスマスと新年あけましておめでとうございます。JPAクエリが実行されておらず、例外をスローする

現在私の大学のJPAプロジェクトで働いています。私は多くのパラメータを受け取る@Serviceクラスに関するメソッド、特にクエリに問題があります。

まず、2つのパラメータを使用してクエリを動作させようとしています。

ここにその方法があります。

WARNING::#{searchBean.fillCandidatesOps}:java.lang.IllegalArgumentExceptionが:org.hibernate.QueryException:すべての名前付きパラメータがされていない私は、このクエリを実行しようとする一方で

@Override 
@Transactional (readOnly = true) 
public List<Candidate> obtainCandidatesOps(String name, String firstName, 
     String secondName, String passport, CandidateType candidateType, 
     Area area, Country country) { 

    List<Candidate> resultList = new ArrayList<Candidate>(); 
    CriteriaBuilder cb = em.getCriteriaBuilder(); 
    CriteriaQuery<Candidate> cq = cb.createQuery(Candidate.class); 
    Root<Candidate> r = cq.from(Candidate.class); 
    cq.where(cb.and(cb.equal(r.get("name"), cb.parameter(String.class, "name")),cb.equal(r.get("firstLastName"), cb.parameter(String.class, "firstName")))); 
    cq.select(r); 
    resultList = em.createQuery(cq).getResultList(); 
    return resultList; 
} 

は、私はこのエラーを受け取りますセット:[firstName、name] [generatedAlias0はどこから(generatedAlias0.name =:name)と(generatedAlias0.firstLastName =:firstName)]を選択します。

間違いはどこですか?私はこれを5日間以上過ごしてきましたが、システムの開発の背後に本当にありました。私は本当にこれに関するいくつかのヒントを必要としています:)

私はこのトピックを読んで、私の問題を解決しませんでした。

Caused by: org.hibernate.QueryException: Not all named parameters have been set: [isActive] [from User where isActive = :isActive]

How to solve "org.hibernate.QueryException: Not all named parameters have been set" error?

感謝あなたのすべて。

答えて

0

2つのリンクされたスレッドは、(なぜ「5日間見たが、これに気付かなかったのか」という理由がわからないため)、そのクエリで定義したパラメータのVALUEを設定する必要があります。

cq.where(cb.and(cb.equal(r.get("name"), cb.parameter(String.class, "name")),cb.equal(r.get("firstLastName"), cb.parameter(String.class, "firstName")))); 
cq.select(r); 
Query query = em.createQuery(cq); 
query.setParameter("name", name); 
query.setParameter("firstName", firstName); 
resultList = query.getResultList(); 
+0

お返事ありがとうございました。私はこれを試しましたが、結果が得られませんでした。つまり、nullで返されるリストです。もちろん、私はリストにnullで返されなかったかどうかを見るためにデータベース上の "名前"を使ってこのクエリを試しました。 – AvB

+0

もしあなたがそれをしたら、質問に答えが出るかもしれないので、QUESTION(これはあなたが欠落しているパラメータについての例外を持っていると言います)でそう言わなければなりません。次に、選択したJPAプロバイダによって呼び出されたSQLを見てデバッグします。 –

関連する問題