将包含连接提取的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 抽象层