本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Jpa递归查询

发布于2021-10-29 11:32     阅读(505)     评论(0)     点赞(24)     收藏(2)


考虑以下模式

@Entity
Class employee{

@OneToMany()
List<employee> manaagedEmps;
@OneToOne
employee manager;

}

如何编写一个查询来获取某个经理的所有管理员工,直接(managedEmps 列表)和间接(由管理员工管理)。


解决方案


JPA 似乎不支持递归查询。最近我通过添加ltree (postgresql)类型的“路径”字段解决了这个问题路径是通过将用点分隔的id添加到父节点的路径生成的,根节点的路径就是id。使用该字段,您可以查询某个节点(经理)的子树(直接和间接员工):

SELECT * FROM nodes WHERE path ~ '*.42.*{1,}'; /* for path of type ltree */
SELECT * FROM nodes WHERE path LIKE '%.42.%'; /* for path of type varchar */

以下 JPQL 查询返回 id 为 2 的员工的子列表。

        List<Employee> subs = em.createQuery(
            "SELECT e FROM Employee e LEFT JOIN FETCH e.subs WHERE e.path LIKE '%.' || ?1 || '.%'",
            Employee.class
    ).setParameter(1, '2').getResultList();


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/305844/dd0c9c64968304fe5936/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)