如何在JPA Criteria查询API中编写自定义查询作为根?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JPA Criteria查询API中编写自定义查询作为根?相关的知识,希望对你有一定的参考价值。

我的查询是:

select * from tbl1 t1,
(select max(modified_datetime),id as ID ,status from 
 tbl2 group by modified_datetime,ID,status) t2 
where 
t1.ID=t2.ID;

我该如何实现?

请帮助!

答案

没有提供代码,我假设您已完成所有配置。以下是为您提供的解决方案。

@Query(nativeQuery = true, value = "select * from tbl1 t1,(select max(modified_datetime),id as ID ,status from tbl2 group by modified_datetime,ID,status) t2 where t1.ID=t2.ID;")
    ReturnType methodName(@Param("paramsHereIfAny") String paramsHereIfAny);

评论后编辑

//some parameters to your method
        String param1 = "1";
        String paramNull = null;

        CriteriaBuilder qb = em.getCriteriaBuilder();
        CriteriaQuery cq = qb.createQuery();
        Root<A> customer = cq.from(A.class);

        //Constructing list of parameters
        List<Predicate> predicates = new ArrayList<Predicate>();

        //Adding predicates in case of parameter not being null
        if (param1 != null) 
            predicates.add(
                    qb.equal(customer.get("someAttribute"), param1));
        
        if (paramNull != null) 
            predicates.add(
                    qb.equal(customer.get("someOtherAttribute"), paramNull));
        
        //query itself
        cq.select(customer)
                .where(predicates.toArray(new Predicate[]));
        //execute query and do something with result
        em.createQuery(cq).getResultList();

以上是关于如何在JPA Criteria查询API中编写自定义查询作为根?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JPA Criteria API 连接不相关的实体

JPA Criteria API where subclass - 出现错误:无法针对路径 [null] 解析属性 [lastName]

在 JPA Criteria API 的子查询中使用 ORDER BY 的替代方法是啥?

如何使用 JPA Criteria API / Hibernate 按 Case 语句分组

比较 JPA Criteria API 中的日期实体

使用方法:JPQL或Criteria API? [关闭]