【问题标题】:JPA based Criteria query for finding entity by field name基于 JPA 的 Criteria 查询,用于按字段名称查找实体
【发布时间】:2015-10-01 07:56:26
【问题描述】:

我不知道是不是我发现使用 JPA 进行条件查询很困难。 下一步要做什么才能获得名称 = :tagNam

的标签
    Tag getTagByName(String tagName){

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Tag> cq = cb.createQuery(Tag.class);
        Root<Tag> root = cq.from(Tag.class);
        **//what to do next in order to get Tag(s) with name = :tagNam**
    }

Tag 是一个实体,字段为name

我看过:

  1. http://docs.oracle.com/javaee/6/tutorial/doc/gjivm.html
  2. http://www.ibm.com/developerworks/library/j-typesafejpa/
  3. http://www.programcreek.com/java-api-examples/javax.persistence.criteria.CriteriaQuery

但无法掌握概念。有没有简单的分步教程或综合教程?

我也很沮丧,因为我被要求(根据教程)使用 Tag_ 当然不能解决。

【问题讨论】:

标签: java jakarta-ee jpa jpa-2.0 criteria


【解决方案1】:

试试这个:

CriteriaQuery<Tag> cq = cb.createQuery(Tag.class);
Root<Tag> tag = cq.from(Tag.class);
cq.where(cb.equal(tag.get(Tag_.name), tagName));

这是改编自 oracle 文档(您的第一个链接)。

【讨论】:

  • 在你的最后一行,tag 没有 .get() 方法
  • 这不是 Tag 类的 get() 方法。它是 Root 接口的一个方法,继承自 Path 接口。所以它应该在那里......
  • 无法解析Tag_我觉得和meta models有关(我不想用)
  • 那为什么不用JPQL呢?您可以使用以下内容来实现它:“from Tag t where t.name := tagName”...
  • 好的,但您知道要么选择 Criteria AND Metamodel,要么选择 JPQL,对吧?因此,如果您不想使用 JPQL,您将需要使用 MetaModel 来过滤您的结果...也就是说,我仍然认为您发布的本教程非常简单...docs.oracle.com/javaee/6/tutorial/doc/gjiup.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2020-09-14
  • 2020-06-29
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
相关资源
最近更新 更多