我在实体类Voter中编写了一个命名查询
NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password),
我想调用这个命名查询,我还需要设置voterID和密码。
你能帮我吗?谢谢答案 0 :(得分:38)
我假设您错过了NamedQuery注释中的@符号?
在代码中,您可以这样称呼它:
List results = em.createNamedQuery("Voter.findvoter")
.setParameter("voterID", "blah")
.setParameter("password","blahblahblah")
.getResultList();
答案 1 :(得分:4)
您的命名查询有两个明显的问题会导致问题:
@NamedQuery
不仅仅是NamedQuery
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password
。
问题是你在:voterID
之后而不是在:password
之后终止了你的字符串,并且你有"其中"两次,你在"之间有一个空格:"和#34;密码"。您的查询应如下所示:
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID and v.password= :password"
(我刚刚将"移到了最后并移除了第二个"其中"以及"之后的空格:")
答案 2 :(得分:2)
常见步骤(命名查询或其他)
通过以上三个步骤,您可以运行任何JPA查询。
答案 3 :(得分:1)
实际上布伦特是对的,你的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);
应该实际工作。(它是一个未编译的代码)。
你也可以用Repository做,检查下面的链接,部分Repository Listing23.Example repository enter link description here