我有3张桌子:
School
school_id, school_name, student_id
Student
student_id, student_name ,subject_id
Subject
subject_id, subject_name
学校之间存在一对多的关系-
我正在编写规范
查询以获取特定学校的学生:
List<Student> students = schoolRepo.findAll(Specification.where (findStudents(schoolId));
public static Specification<Student> findStudents(long schoolId) {
return (root, query, cbuilder) -> {
root.fetch("students", JoinType.LEFT);
return cbuilder.and(cbuilder.equal(root.get("school"), schoolId));
};
}
虽然我没有在规范查询或代码中的任何地方获取主题(如使用get
)。
我仍然可以在生成的查询中的日志中看到主题最终被获取。
我如何更新我的查询以仅限于学校
请建议。
您可以尝试改用EntityGraph。它有助于提高加载实体的性能。你可以这样做
@Entity
@NamedEntityGraph (
name="school-students",
attributeNodes = {
@NamedAttributeNode("students")
}
)
public class School implements Serializable { ... }
And then in your repository use it like this :
@Override
@EntityGraph(value = "school-students",
type = EntityGraph.EntityGraphType.FETCH)
@Query( value = "SELECT s FROM School s where s.id =:id")
School findOne();
有一个使用属性表达式的查询:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-方法。查询属性表达式: 试图通过规范执行查询: 我得到了一个错误: 我做错了什么或忘记添加了什么? 查询:按教师姓名显示所有学生 基地实体: 实体教师: 实体学生: 实体教室: 实体教室:
问题内容: 我有一个可以对所有类别进行建模的类,可以对它们进行分层排序。 我需要按等级对所有类别进行排序(我的意思是每个父亲都跟随其子级,而父亲在每个级别上按字母顺序排序),例如可以使用oracle中的PRIOR进行分类。是否可以使用JPA查询(而非SQL查询)来执行此操作? 谢谢。 问题答案: 简短的答案是:没有,没有标准的方法可以做到这一点。 您必须使用本机sql。 您可能可以扩展Oracle
TL;DR:如何使用Spring Data JPA中的规范复制JPQL Join-Fetch操作? 在本例中,每次我要检索记录时,我还想要它关联的和记录。这一切都按预期工作,对单个的请求将引发3个查询:、和表各一个查询。 问题是,没有理由需要运行3个查询来获得具有嵌入属性和别名的单个实体。这可以在普通SQL中完成,也可以在我的Spring Data JPA存储库中使用JPQL查询完成: 如何使用规
选择createdAt大于或等于“2021-08-15t00:00:00.000z”的记录 对于每个用户ID,只返回最新的记录,即按desc顺序按createdAt排序的记录。 返回的文档应该具有原始文档中的所有键。键的数量可能比文档中显示的要多得多。因此,查询应该自动返回所有键。 下面是所需的示例输出:
我使用spring jpa规范动态构建实体查询。 它工作完美,但是查询返回所有实体字段,这使得性能变慢。我只想获取特定的实体字段,而不是获取我不想要也不会使用的所有实体字段和依赖项。 我在网上搜索,尝试了一些场景,但没有任何不足。有人能就此提出任何解决方案吗? 提前感谢 这是我的。我正在使用spring boot 2.2.4 规格: 存储库: 音乐会服务: ConcertServiceImpl:
我写了一个查询 我在中设置了 2018-05-08 19:22:27.675错误1259--[nio-8080-exec-4]O.A.C.C.C.[.[.[/].[dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的servlet.Service()引发异常[请求处理失败;嵌套异常为org.springframework.dao.inva