名前付きクエリをエンティティクラスの投票者で記述しました
NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password),
この名前付きクエリを呼び出したいのですが、voterIDとパスワードも設定する必要があります。
手伝って頂けますか。ありがとうございました
NamedQueryアノテーションの@記号を見逃したと思いますか?
コードでは、次のように呼び出します。
List results = em.createNamedQuery("Voter.findvoter")
.setParameter("voterID", "blah")
.setParameter("password","blahblahblah")
.getResultList();
名前付きクエリには、問題を引き起こす2つの明らかな問題があります。
NamedQuery
だけではなく_@NamedQuery
_にする必要がありますquery = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password
。
問題は、_:voterID
_の後ではなく_:password
_の後に文字列を終了すると、 "where"が2回あり、 ":"と "password"の間にスペースがあることです。クエリは次のようになります。
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID and v.password= :password"
(「を最後に移動し、2番目の「場所」と「:」の後のスペースを削除したところです。)
一般的な手順は(名前付きクエリまたはその他)
上記の3つの手順で、任意のJPAクエリを実行できます。
実際、brentは正しいです。NameQueryは次のようになります。
@NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID AND where v.password = :password")
@Entity
public class Voter implements Serializable{ ... }
そして他のどこかでこれを試すべきです(ディックはすでに言っています)
public class VoterFasade{
public List<Voter> findVoter(long id,String password){
List<Voter> results = em.createNamedQuery("Voter.findvoter")
.setParameter("voterID", id)
.setParameter("password",password)
.getResultList();
return result;
}
}
それからあなたはそれを次のように使うことができます
@Inject
VoterFasade voterFasade;
///
long id=12;
voterFasade.findVoter(id);
実際に動作するはずです(そのコンパイルされていないコード)。
また、リポジトリでそれを行うこともできます。以下のリンクをチェックしてください。リポジトリのリスト23の例。リポジトリの例 ここにリンクの説明を入力してください