【问题标题】:JPA select query with where clause带有 where 子句的 JPA 选择查询
【发布时间】:2011-07-05 09:57:54
【问题描述】:

我想写一个select语句,但是不知道怎么写where子句...

我的代码:

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

这是在我将字符串传递给的方法中。我只想获取与我传递给方法的字符串值匹配的行。

【问题讨论】:

  • 实际上,这里没有任何与 JSF 相关的问题。这是 JPA 语法的问题。

标签: java jpa


【解决方案1】:

据我了解,方法参数应该是查询的参数。

所以,应该是这样的:

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

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

【讨论】:

  • 这对我不起作用,伙计......事实上,你的第一行甚至没有编译..如果我删除 getCriteriaBuilder() 它编译但仍然不运行查询..抛出 javax .faces.el.E​​valuationException: javax.ejb.EJBException
【解决方案2】:

在标准中是这样的:

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

【讨论】:

    【解决方案3】:

    您可以在实体管理器中使用多个 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多