栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

递归JPA查询?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

递归JPA查询?

使用简单的 邻接模型 ,其中每一行包含对其父级的引用,该引用将引用同一表中的另一行,因此与JPA不能很好地配合。这是因为JPA不支持使用Oracle
ConNECT BY子句或SQL标准WITH语句生成查询。如果没有这两个子句中的任何一个,则实际上不可能使邻接模型有用。

但是,有两种其他方法可以对此问题进行建模。首先是 物化路径模型 。这是将节点的完整路径展平为单个列的地方。表定义的扩展如下:

CREATE TABLE node (id INTEGER,        path VARCHAR,         parent_id INTEGER REFERENCES node(id));

插入节点树看起来像:

INSERT INTO node VALUES (1, '1', NULL);  -- Root NodeINSERT INTO node VALUES (2, '1.2', 1);   -- 1st Child of '1'INSERT INTO node VALUES (3, '1.3', 1);   -- 2nd Child of '1'INSERT INTO node VALUES (4, '1.3.4', 3); -- Child of '3'

因此,要获取节点“ 1”及其所有子代,查询为:

SELECt * FROM node WHERe id = 1 OR path LIKE '1.%';

要将其映射到JPA,只需将“路径”列设置为持久对象的属性。但是,您将必须进行簿记以使“路径”字段保持最新。JPA /
Hibernate不会为您这样做。例如,如果将节点移动到其他父对象,则必须更新两个父引用,并从新的父对象确定新的路径值。

另一种方法称为 嵌套集模型
,这更复杂。最好由其创建者最好地描述(而不是由我逐字逐句地加以描述)。

第三种方法称为嵌套间隔模型,但是这种方法非常依赖于存储过程的实现。

SQL的艺术第7章介绍了对该问题的更完整的解释。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号