这是我的第一篇文章,所以我希望你能帮助我找到解决问题的方法:)
我有2列,idParent和idChild。如果我想表示Parent id = 1有2个孩子(id = 2& id = 3),我们会发现:
+--------------------+
| idParent idChild |
+--------------------+
| 1 2 |
| 1 3 |
+--------------------+
好吧,我的目标是从idChild开始,找到他所有的"顶部"父母(没有父母的父母)在一次查询中,如果可能的话。
样品:
+--------------------+
| idParent idChild |
+--------------------+
| 1 3 |
| 2 4 |
| 2 5 |
| 3 5 |
| 3 6 |
| 5 7 |
+--------------------+
预期结果(如果我们开始使用idChild = 7查询):
+----------+
| idParent |
+----------+
| 1 |
| 2 |
+----------+
我不知道我是否可以通过单个查询解决问题。我的另一个选择是创建一个简单的查询,从父级返回父级并从我的Java代码开始多次调用它(效率低得多)。
谢谢!
注意:如果有帮助,我必须使用CriteriaQuery API来访问数据。
答案 0 :(得分:0)
criteriaBuilder.withRecursive(CteName.class)
.from(EntityName.class, "tableAlias1")
.bind("idParent").select("table_name.idParent")
.bind("idChild").select("table_name.idChild")
.where("table_name.idChild").eq("7")
.union()
.from(EntityName.class, "tableAlias2")
.bind("idParent").select("table_name.idParent")
.bind("idChild").select("table_name.idChild")
.where("tableAlias2.idChild").eq("tableAlias1.idParent");
然后您可以使用生成的结果
object.getList();