将包含连接提取的SQL查询转换为Criteria Hibernate查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将包含连接提取的SQL查询转换为Criteria Hibernate查询相关的知识,希望对你有一定的参考价值。

我想转换以下查询:

Query query = entityManager.createQuery("from TestEntity te " +
                    "join fetch te.someEntity se " +  
                    "left join fetch te.someEntity2 se2 "
                    "left join fetch se2.someEntity3 " +
                    "where se.predicateHere =:prediacte");

到Criteria Hibernate查询,但肯定遗漏了一些东西,因为我收到以下错误:

query specified join fetching, but the owner of the fetched association was not present in the select list

当我尝试这个:

Root<TestEntity> testEntityRoot = criteria.from(TestEntity.class);
testEntityRoot.fetch(TestEntity_.someEntity, JoinType.INNER);
testEntityRoot.fetch(TestEntity_.someEntity2, JoinType.LEFT).fetch(SomeEntity2.someEntity3, JoinType.LEFT);

对表/列命名感到抱歉,但它是敏感数据。

答案

我最终使用相同的查询解决了这个问题:

Root<TestEntity> testEntityRoot = criteria.from(TestEntity.class);
testEntityRoot.fetch(TestEntity_.someEntity, JoinType.INNER);
testEntityRoot.fetch(TestEntity_.someEntity2, JoinType.LEFT).fetch(SomeEntity2.someEntity3, JoinType.LEFT);

除了我以错误的顺序获取实体。

首先,我们需要获取根实体,然后链接任何提取以获得我们想要的那个。

以上是关于将包含连接提取的SQL查询转换为Criteria Hibernate查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Criteria 中使用 Select 和 where 语句

如何将原始 SQL 查询转换为 Silverstripe SQLQuery 抽象层

将 SQL 连接查询转换为 pyspark 语法

如何将带有内连接语句的 Sql 查询转换为带有 Where 语句的 sql 查询(语句中没有内连接)

将sql连接查询转换为mongodb

将sql代码转换为linq(内连接查询)