当前位置: 首页 > 知识库问答 >
问题:

使用复合Where子句的低效JPA查询

萧晓博
2023-03-14

我有一个具有一-多关系的表,如下所示

城市->学校->老师->孩子

我的从城市检索子级的JPQL如下所示

@Query("Select c  from Children c where c.teacher.school.city=:city")
Set<Children> findChildrenFromCity(@Param("city") City city);

这里关于Where子句的引用说明

“复合路径表达式使where子句功能极其强大。”

然而,在观察日志时,我意识到上面的查询正在执行奇怪的操作,例如

我试图理解我是否正确地定义了我的查询,如果Where的复合物确实如此强大,为什么我的查询如此低效。

共有1个答案

盛建德
2023-03-14

您可以使用以下方法:

Set<Children> findAllByTeacherSchoolCity(String city);

假设您的类children具有字段teacherteacher具有字段schoolschool以及school具有字段string city

如有不同之处,请在评论中询问以求澄清。

 类似资料:
  • 问题内容: 在JPA中,查询为: 如何在JPA中将类别设置为任何类别?因此,如果传递了null类别,我将简单地忽略category参数,选择所有产品。 问题答案: 如何在JPA中将类别设置为任何类别?因此,如果传递了null类别,我将简单地忽略category参数,选择所有产品。 您必须在此处动态构建查询。使用HQL(这是一个简化的示例): 但是,实际上,我的建议是在此处使用Criteria AP

  • 问题内容: 我有以下只需1秒即可执行的sql查询: 但是我需要一个结果集来获取比率大于0的结果。因此,当我将查询更改为此时,需要7分钟的时间来执行: 为什么这会使查询时间从1秒增加到7分钟?由于b表很大,因此我什至尝试使用CTE,但这也没有提高性能。我认为使用CTE可以从中筛选出较小的一组值,因此应该更快一些,但这无济于事: 我不能包括执行计划,因为除了查询之外,我没有对数据库的权限。 问题答案:

  • 我是JPA的新手。使用where子句构建select查询。我需要从表Contacts中选择所有等于字符串名称值的ContactName。 以下是执行我的项目时出现的错误:java.lang.IllegalArgumentException:无法根据在org.hibernate.jpa.criteria.path.abstractPathimpl.unknownatAttribute(abstrac

  • 主要内容:标准WHERE示例WHERE子句用于对数据库应用条件并基于该条件获取数据。 在Criteria API中,AbstractQuery接口的)方法用于设置查询条件。 标准WHERE示例 在这里,我们将在表上执行多个操作。假设该表包含以下记录 - 现在,请按照以下步骤执行操作: - 第1步: 创建一个实体类。在包下创建了类文件。 该类包含三个属性:,,以及所有必需的注解。 文件:StudentEntity.java -

  • 我对JPA相当陌生,它是CriteriaBuilder/CriteriaQuery API: 我想查询一组对象的摘录(如下所示,我只选择结果中的元素n到m) 查询本身运行良好,我得到了预期的结果。 但是如果我尝试计算所有可能的结果,我会得到一个java。lang.IllegalArgumentException: org.hibernate.hql.internal.ast.无效路径:'生成lia

  • 问题内容: 我最近才刚开始使用SQLAlchemy,但仍无法解决某些概念。 归结为基本元素,我有两个这样的表(通过Flask-SQLAlchemy): 我将如何查询用户列表及其最新帖子(不包括无帖子的用户)。如果我使用的是SQL,则可以执行以下操作: 因此,我确切地知道“期望的” SQL可以达到我想要的效果,但是不知道如何在SQLAlchemy中“正确地”表达它。 编辑:如果很重要,我使用的是SQ