如何使用具有多对多连接到同一个表的 JPA 分层检索数据
Posted
技术标签:
【中文标题】如何使用具有多对多连接到同一个表的 JPA 分层检索数据【英文标题】:How to retrieve data hierarchically using JPA with many to many join to same table 【发布时间】:2018-04-16 07:35:42 【问题描述】:我有一个包含一些版本的表(tbl_versions)。版本之间的关系就像父母和孩子。所以我把关系放在另一个表(tbl_relations)中,它有两条记录(parent_id,child_id),它与tbl_versions有多对多的关系。我想以树模型的形式检索数据,最后有一个树模型中的 json 文件。关于如何使用 JPQL 选择和检索的任何建议?
【问题讨论】:
JPA 和 JPQL 检索实体的对象。你还没有向我们展示你的实体。所以定义你的实体,你尝试过的 JPQL 以及为什么你认为你获得的结果是一个问题 【参考方案1】:分层查询并不容易实现。一般来说,编写原生 SQL 是创建查询的最强大方式,因为到最后,JPQL、HQL 或其他任何东西都会被翻译成原生 SQL 并发送到数据库。那么,如果你不能用 SQL 编写查询(我的意思是一次性),那么你将找不到通过 JPQL 编写它的方法。
但是回到您的具体问题,像 Oracle 这样的数据库提供了像 start with connect by 这样的机制,JPQL 不支持这种机制,因为 mysql 等其他数据库不支持这种机制。
在这种情况下,我的建议是多使用一列来保存记录之间的层次结构。该列就像一个元数据持有者一样,它不仅描述了两条记录之间的父子关系,而且还包含有关当前记录祖先的信息。
【讨论】:
以上是关于如何使用具有多对多连接到同一个表的 JPA 分层检索数据的主要内容,如果未能解决你的问题,请参考以下文章