如何使用多个JOIN和CriteriaBuilder来构建谓词



我有一个表A,它有一个属性,该属性是表B中的一个实体,而该实体又连接到表C。

(正在工作的(SQL查询如下所示:

SELECT a.* from A a
LEFT JOIN B b ON a.b_id=b.id
LEFT JOIN C c ON b.c_id=c.id where c.attribute=VALUE;

基本上,VALUE就是我过滤的内容;B和来自B->C.

还有其他参数Im也在过滤,所以我有一个Specification类,它为每个传入的参数生成Predicate,以构建谓词列表,然后在最后将其进行AND运算。Specification是使用类似findAll(MySpecificationClass.search(params))的东西从我的Repository调用的。

我很难理解如何在Specification类中使用CriteriaBuilder编写此SQL查询。

注意:

  1. 这是在一个用Kotlin编写的Spring Boot应用程序中
  2. 我的规范类是一个单例,所以我不能自动连接例如EntityManager
  3. 我试图使用get()的链来从a导航,通过B导航到C,但这不起作用——它似乎无论如何都会返回所有记录
  4. 我的项目使用的是spring数据jpa 2.2.6

通过一位同事的帮助,我能够构建这个(也应该是INNER JOIN(。

从我的Specification类返回的特定谓词是:

val joinToB: Join<A, B> = root.join("B", JoinType.INNER)
val joinToC: Join<B, C> = joinToB.join("C", JoinType.INNER)
cb.equal(joinToC.get<Long>("attribute"), VALUE)

相关内容

  • 没有找到相关文章

最新更新