【问题标题】:JPA 2 CriteriaQuery order by indexJPA 2 CriteriaQuery 按索引排序
【发布时间】:2012-02-29 00:02:33
【问题描述】:

我有一个包含List<EntityRevision> 的实体。该集合有一个@OrderColumn

我想获取按索引排序的实体的所有EntityRevisions

我可以通过以下查询来做到这一点:

SELECT er 
  FROM Entity e JOIN e.revisions er 
  WHERE e.id = :entityId 
  ORDER BY index(er)

但我不知道如何使用CriteriaQuery 执行此操作。

使用 EclipseLink 2.3.2 / JPA 2.0.3 - Root<EntityRevision> 上没有我可以在 orderBy 中使用的 index() 方法。

有什么想法吗?

【问题讨论】:

    标签: jpa-2.0 eclipselink criteria-api


    【解决方案1】:

    我还没有测试过,但是类似 criteriaQuery.orderBy(criteriaBuilder.asc(((ListJoin)root.get("listMapping")).index())); 如果您的 listMapping 是带有 orderby 列的列表,则应该可以工作。

    【讨论】:

      【解决方案2】:

      这对我有用:

      final EntityManager m = ...
      final CriteriaBuilder b = m.getCriteriaBuilder();
      final CriteriaQuery<Child> q = b.createQuery( Child.class );
      final Root<Parent> p = q.from( Parent.class );
      final ListJoin<Parent, Child> j = p.join( Parent_.children );
      final CriteriaQuery<Child> s = q.select( j );
      
      s.where( b.equal( j.get( Child_.parent ), parent ) );
      s.orderBy( b.asc( j.index() ) );
      
      final TypedQuery<Child> t = m.createQuery( s );
      final List<Child> children = t.getResultList();
      
      Assert.assertEquals( parent.getChildren().size(), children.size() );
      Assert.assertEquals( parent.getChildren(), children );
      

      【讨论】:

        猜你喜欢
        • 2015-03-16
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 2012-07-24
        • 2011-04-12
        • 1970-01-01
        • 2015-04-07
        • 2015-12-17
        相关资源
        最近更新 更多