【问题标题】:Criteria count + sub query条件计数+子查询
【发布时间】:2012-06-29 12:40:47
【问题描述】:

我正在尝试实现类似的东西:

从 Thread 中选择线程 where(Select Sum(thread.emails) from Thread) 等于?

我如何使用 Criteria + JPA 来实现它?

提前致谢

【问题讨论】:

    标签: criteria


    【解决方案1】:

    CriteriaBuilder 中有一个 size() 方法来定义集合的大小。

    CriteriaBuilder cb = em.getCriteriaBuilder(); //em is EntityManager
    CriteriaQuery<Thread> cq = cb.createQuery(Thread.class);
    
    Root<Thread> root = cq.from(Thread.class);
    Expression<Collection<String>> emails = root.get("emails");
    cq.where(cb.equal(cb.size(emails), PARAM));
    

    【讨论】:

    • 怎么样,太好了,谢谢!我是标准的新手......我找不到类似的东西来从数组中获取第一个/las 元素。按顺序获得 TOP 1,但也许有一些简单的方法,比如你建议我的尺寸?谢谢
    • @BlancaHdez 你是否延迟初始化你调用 TOP 1 的集合?
    • 不是懒惰而是渴望 --> FetchType.EAGER
    • @BlancaHdez 我建议您使用 FetchType.LAZY,当然这取决于集合的大小。好吧,有Hibernate's LazyCollectionOption.EXTRA 在集合上调用 get() 方法,它将查询特定元素的数据库,而不检索所有集合。要实现第一个元素,您可以从 db 中检索到 set number of results。当然,如果你使用 LAZY,而不是 EAGER。另外,请阅读JPA Manual
    • 如果是正确答案,请标记为正确,谢谢:>.
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2022-11-09
    • 2021-01-16
    • 2013-05-09
    相关资源
    最近更新 更多