当前位置: 首页 > 面试题库 >

JPA 2条件获取路径导航

宋洲
2023-03-14
问题内容

使用JPA 2 Criteria Join方法,我可以执行以下操作:

    //Join Example (default inner join)
    int age = 25;
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Team> c = cb.createQuery(Team.class);
    Root<Team> t = c.from(Team.class);
    Join<Team, Player> p = t.join(Team_.players);
    c.select(t).where(cb.equal(p.get(Player_.age), age));
    TypedQuery<Team> q = entityManager.createQuery(c);
    List<Team> result = q.getResultList();

我该如何使用fetch方法做同样的事情,我希望Fetch接口具有用于路径导航的get方法,但它不会:

    //Fetch Join Example

    int age = 25;
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Team> cq = cb.createQuery(Team.class);
    Root<Team> t = cq.from(Team.class);
    Fetch<Team,Player> p = t.fetch(Team_.players);
    cq.where(cb.equal(p.get(Player_.age), age)); //This leads to compilation error there is no such method get in interface Fetch
    TypedQuery<Team> q = entityManager.createQuery(cq);
    List<Team> result = q.getResultList();

根据Hiberante文档,获取将返回错误的Join对象。
http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/querycriteria.html#querycriteria-
from-
fetch


问题答案:

就该方法以及您希望它允许您所说的事实与您达成一致。另一种选择是

Join<Team, Player> p = t.join(Team_.players);
t.fetch(Team_.players);
c.select(t).where(cb.equal(p.get(Player_.age), age));

即执行一个join()fetch()为其添加一个,然后利用联接。这是不合逻辑的,只会增加JPA
Criteria的微不足道的性质,但是无论如何,这应该是一种解决方法



 类似资料:
  • 我想知道有没有办法在hibernate中使用criteriaBuilder来做这样的事情 如果我必须使用group by,我需要这个。我搜索和谷歌,也阅读了这篇文章,但不知道如何在Hibernate中做到这一点: 另外,我为选择第一层中的字段编写了代码,它完美地用于选择第一层,但它需要一些更改来处理连接和从根以外的其他表中选择字段: 我使用Hibernate 5.4.22.final并使用enti

  • V1.1.1新增 sp_asset_relative_url($asset_url) 功能: 获取文件相对路径 参数: $asset_url:文件URL 返回 类型字符串,带协议的绝对地址直接返回原来的值,否则会转化为相对于系统upload 目录的文件路径 实例 <?php $file='/data/upload/1.png';//文件路径 $path=sp_asset_relative_url

  • 问题内容: 如何使用Java获取当前计算机的“程序文件”路径? 问题答案: 只需致电 请注意,它仅适用于Windows环境:-)

  • 问题内容: 在CSS中,任何图像路径都相对于CSS文件位置。 f.ex如果我放入CSS文件并使用类似 浏览器将查找有意义的图像。 是否可以在javascript中做同样的事情? F.ex如果我包括以下代码并将其放在其中: 找不到图片,因为浏览器使用HTML文件作为起点,而不是脚本位置。我希望能够像CSS一样使用脚本位置作为起点。 这可能吗? 问题答案: 按照上面的方法在DOM中搜索您自己的标记是可

  • 主要内容:Jsoup 获取URL路径 语法,Jsoup 获取URL路径 说明,Jsoup 获取URL路径 示例以下示例将展示可以提供 html 页面中存在的相对和绝对 URL 的方法。 Jsoup 获取URL路径 语法 document : 文档对象代表 HTML DOM。 Jsoup : 连接到 url 并获取 html 内容的主类。 link : 元素对象表示表示锚标记的 html 节点元素。 link.attr("href") : 提供锚标记中存在的 href 值。它可以是相对的,也可以是

  • 路径导航是显示你的当前位置的一个好方法。通常用于当你有多个层次的内容的时候。 基础 <nav> <div class="nav-wrapper"> <div class="col s12"> <a href="#!" class="breadcrumb">一</a> <a href="#!" class="breadcrumb">二</a> <a href="#!" class