• JPA N+1


    @Query("select e from Employee e")
    @EntityGraph(value = "graph.Employee.assignments", type = EntityGraph.EntityGraphType.FETCH)
    List<Employee> findAllWithAssignments();
    
    @Query("select e from Employee e")
    @EntityGraph(value = "graph.Employee.absences", type = EntityGraph.EntityGraphType.FETCH)
    List<Employee> findAllWithAbsences();

    在很多情况下,我们使用Spring-Data-Jpa,一些简单的查询,我们都喜欢用定义方法查询,而不是写JPQL。JPA为我们提供了一组注解:使用Spring-Data-Jpa为我们提供的@EntityGraph,或@EntityGraph和@NamedEntityGraph进行解决。

    @NamedEntityGraphs、@NamedEntityGraph、@EntityGraph

    @NamedEntityGraphs:用于对@NamedEntityGraph注解进行分组。

    @NamedEntityGraph:用于指定查找操作或查询的路径和边界。   

        属性name:(可选) 实体图的名称。 默认为根实体的实体名。
        属性attributeNodes:(可选) 包含在该图中的实体属性列表。
        属性:includeAllAttributes:(可选)将注释实体类的所有属性作为属性节点包含在NamedEntityGraph中,而无需显式列出它们。包含的属性仍然可以由引用子图的属性节点完全指定。默认为false。一般不需要设置。
        属性subgraphs:(可选)包含在实体图中的子图列表。这些是从NamedAttributeNode定义中按名称引用的。
        属性subclassSubgraphs:(可选) 子图列表 这些子图将向实体图添加注释实体类的子类的附加属性。超类中的指定属性包含在子类中。

    @EntityGraph: 注解用于配置 JPA 2.1规范支持的javax.persistence.EntityGraph,应该使用在repository的方法上面。从1.9开始,我们支持动态EntityGraph定义,允许通过attributePaths()配置自定义fetch-graph。如果指定了attributePaths(),则忽略entity-graph的name(也就是配置的value()),并将EntityGraph视为动态的。

        属性value:要使用的名称。如果为空,则返回JpaQueryMethod.getNamedQueryName()作为value。一般为@NamedEntityGraph的name值,或者不填使用自己的attributePaths属性。
        属性type:要使用的EntityGraphType,默认为EntityGraphType.FETCH。
        属性attributePaths:要使用的属性路径,默认为空。可以直接引用实体属性,也可以通过roperty.nestedProperty引用嵌套属性。
        枚举EntityGraphType:
          LOAD("javax.persistence.loadgraph"):当javax.persistence.loadgraph属性用于指定实体图时,由实体图的attributePaths指定的属性将被视为FetchType.EAGER,未指定的属性,将根据其设置的或默认的FetchType来进行处理。
          FETCH("javax.persistence.fetchgraph"):当javax.persistence.fetchgraph属性用于指定实体图时,由实体图的attributePaths指定的属性将被视为FetchType.EAGER,而未指定的属性被视为FetchType.LAZY。

     
  • 相关阅读:
    面试十题(4)
    TS中给接口指定的成员?
    TS中定义泛型接口的两种方式
    ts中泛型的使用
    ts中类的属性的封装
    ts中接口的使用
    自定义hook的步骤
    react中如何使用useReducer?
    react中useContext的使用
    react 中useRef的作用
  • 原文地址:https://www.cnblogs.com/zany-hui/p/13517774.html
Copyright © 2020-2023  润新知