我在实体类 Voter 中写了一个命名查询
NamedQuery(name = "Voter.findvoter", query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password),
我想调用这个命名查询,我还需要设置 voterID 和密码。
你能帮助我吗。谢谢
我在实体类 Voter 中写了一个命名查询
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();
您的命名查询有两个明显的问题会导致问题:
@NamedQuery
只是NamedQuery
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID" and where v.password= : password
.
问题是你终止了你的字符串 after :voterID
,而不是 after:password
并且你有两次 "where" 并且你在 ":" 和 "password" 之间有一个空格。您的查询应如下所示:
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID and v.password= :password"
(我刚刚将 " 移到末尾并删除了第二个 "where" 和 ":" 之后的空格)
常见的步骤是(命名查询或其他)
通过以上三个步骤,您可以运行任何 JPA 查询。
实际上布伦特是对的,你的 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