JPA带有where子句的查询语句

16

我想写一个选择语句,但是不知道该如何编写where子句...

我的代码:

CriteriaQuery query = entityManager.getCriteriaBuilder().createQuery();
query.select(query.from(SecureMessage.class)).where();

我正在一个方法中传递一个字符串,我想只获取与我传递给该方法的字符串相匹配的行。


实际上,这个问题与JSF无关,而是涉及到JPA语法。 - sergionni
3个回答

23

在 Criteria 中,类似于这样:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<SecureMessage> query = cb.createQuery(SecureMessage.class);
Root<SecureMessage> sm = query.from(SecureMessage.class);
query.where(cb.equal(sm.get("someField"), "value"));

在JPQL中:

Query query = entityManager.createQuery("Select sm from SecureMessage sm where sm.someField=:arg1");
query.setParameter("arg1", arg1);

参见, http://en.wikibooks.org/wiki/Java_Persistence/Querying#Criteria_API_.28JPA_2.0.29


18

据我所知,方法参数应该是查询的参数。

因此,应该像这样:

Query query = entityManager.getCriteriaBuilder().createQuery("from SecureMessage sm where sm.someField=:arg1");
query.setParameter("arg1", arg1);

其中arg1是你的方法字符串参数。


那个对我没用啊伙计... 事实上,你那第一行甚至编译不了.. 如果我去掉 getCriteriaBuilder() 它就能编译了,但仍然无法运行查询.. 抛出 javax.faces.el.EvaluationException: javax.ejb.EJBException。 - mixkat

0

您可以使用以下实体管理器的多个where子句。您需要为每个参数设置参数。

entityManager.createQuery("select u from customer u " +
                    "where u.instituteName=:instituteName " +
                    "and u.applicationName=:applicationName")
                    .setParameter("instituteName", cusSubReq.getInstituteName())
                    .setParameter("applicationName", cusSubReq.getApplicationName()).getSingleResult();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接