我在实体类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
.
问题在于您在:voterID
后终止了字符串,而不是在:password
后终止,并且您有两个"where"和":"和"password"之间有一个空格。您的查询应该像这样:
query = "SELECT count(*) FROM Voter v WHERE v.voterID = :voterID and v.password= :password"
(我刚刚将“”移到了末尾,并删除了第二个“where”和“:”后的空格)
常见步骤如下(命名查询或其他)
通过上述三个步骤,您可以运行任何JPA查询。
@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{ ... }
还有其他地方你应该尝试这个(Dick已经说过了)
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 在此输入链接说明