Class EntityGraphs

java.lang.Object
org.hibernate.graph.EntityGraphs

public final class EntityGraphs extends Object
A collection of EntityGraph utilities.
API Note:
These operations are things which are arguably missing from JPA.
  • Constructor Details

    • EntityGraphs

      public EntityGraphs()
  • Method Details

    • createGraph

      public static <T> EntityGraph<T> createGraph(EntityType<T> rootType)
      Create a new entity graph rooted at the given entity, without needing a reference to the session or session factory.
      Parameters:
      rootType - The EntityType representing the root entity of the graph
      Returns:
      a new mutable EntityGraph
      Since:
      7.0
    • createGraphForDynamicEntity

      public static EntityGraph<Map<String,?>> createGraphForDynamicEntity(EntityType<?> rootType)
      Create a new entity graph rooted at the given dynamic entity, without needing a reference to the session or session factory.
      Parameters:
      rootType - The EntityType representing the root entity of the graph, which must be a dynamic entity
      Returns:
      a new mutable EntityGraph
      Since:
      7.0
    • merge

      @SafeVarargs public static <T> EntityGraph<T> merge(EntityManager entityManager, Class<T> root, Graph<T>... graphs)
      Merges multiple entity graphs into a single graph that specifies the fetching/loading of all attributes the input graphs specify.
      Type Parameters:
      T - Root entity type of the query and graph.
      Parameters:
      entityManager - EntityManager to use to create the new merged graph.
      root - Root type of the entity for which the graph is being merged.
      graphs - Graphs to merge.
      Returns:
      The merged graph.
    • merge

      public static <T> EntityGraph<T> merge(EntityManager entityManager, Class<T> root, List<? extends Graph<T>> graphs)
      Merges multiple entity graphs into a single graph that specifies the fetching/loading of all attributes the input graphs specify.
      Type Parameters:
      T - Root entity type of the query and graph.
      Parameters:
      entityManager - EntityManager to use to create the new merged graph.
      root - Root type of the entity for which the graph is being merged.
      graphs - Graphs to merge.
      Returns:
      The merged graph.
      Since:
      7.0
    • merge

      public static <T> EntityGraph<T> merge(EntityManager entityManager, Class<T> root, Stream<? extends Graph<T>> graphs)
      Merges multiple entity graphs into a single graph that specifies the fetching/loading of all attributes the input graphs specify.
      Type Parameters:
      T - Root entity type of the query and graph.
      Parameters:
      entityManager - EntityManager to use to create the new merged graph.
      root - Root type of the entity for which the graph is being merged.
      graphs - Graphs to merge.
      Returns:
      The merged graph.
      Since:
      7.0
    • setGraph

      public static <R> void setGraph(TypedQuery<R> query, EntityGraph<R> graph, GraphSemantic semantic)
      Convenience method to apply the given graph to the given query without the need for a cast when working with JPA API.
      Parameters:
      query - The JPA TypedQuery
      graph - The JPA EntityGraph to apply
      semantic - The semantic to use when applying the graph
      Since:
      7.0
      See Also:
    • setLoadGraph

      public static <R> void setLoadGraph(TypedQuery<R> query, EntityGraph<R> graph)
      Convenience method to apply the given load graph to the given query without the need for a cast when working with JPA API.
      Parameters:
      query - The JPA TypedQuery
      graph - The JPA EntityGraph to apply
      Since:
      7.0
    • setFetchGraph

      public static <R> void setFetchGraph(TypedQuery<R> query, EntityGraph<R> graph)
      Convenience method to apply the given fetch graph to the given query without the need for a cast when working with JPA API.
      Parameters:
      query - The JPA TypedQuery
      graph - The JPA EntityGraph to apply
      Since:
      7.0
    • addTreatedSubgraph

      public <S> Subgraph<S> addTreatedSubgraph(Graph<? super S> graph, Class<S> subtype)
      Allows a treated subgraph to ve created for a Subgraph, since the JPA-standard operation EntityGraph.addTreatedSubgraph(Class) is declared by EntityGraph.
      Parameters:
      graph - any root graph or subgraph
      subtype - the treated (narrowed) type
      Since:
      7.0
    • executeList

      @Deprecated(since="7.0") public static List executeList(Query query, EntityGraph<?> graph, GraphSemantic semantic)
      Deprecated.
      Since it is not type safe and returns a raw type
      Convenience method for executing the query, applying the given EntityGraph using the specified semantic
      Parameters:
      query - The JPA Query
      graph - The graph to apply
      semantic - The semantic to use when applying the graph
    • executeList

      @Deprecated(since="7.0") public static <R> List<R> executeList(TypedQuery<R> query, EntityGraph<R> graph, GraphSemantic semantic)
      Parameters:
      query - The JPA Query
      graph - The graph to apply
      semantic - The semantic to use when applying the graph
      API Note:
      This signature assumes that the Query's return is an entity and that the graph applies to that entity's type. JPA does not necessarily require that, but it is by far the most common usage.
    • executeList

      @Deprecated(since="7.0") public static List executeList(Query query, EntityGraph<?> graph, String semanticJpaHintName)
      Deprecated.
      Since it is not type safe, returns a raw type, and accepts a string
      Convenience method for executing the query, applying the given EntityGraph using the named semantic using JPA's "hint name". See GraphSemantic.fromHintName(java.lang.String).
      Parameters:
      query - The JPA Query
      graph - The graph to apply
      semanticJpaHintName - See GraphSemantic.fromHintName(java.lang.String)
      Returns:
      The result list
    • executeList

      @Deprecated(since="7.0") public static <R> List<R> executeList(TypedQuery<R> query, EntityGraph<R> graph, String semanticJpaHintName)
      Deprecated.
      Since it accepts a string instead of GraphSemantic
      Parameters:
      query - The JPA Query
      graph - The graph to apply
      semanticJpaHintName - See GraphSemantic.fromHintName(java.lang.String)
      API Note:
      This signature assumes that the Query's return is an entity and that the graph applies to that entity's type. JPA does not necessarily require that, but it is by far the most common usage.
    • executeList

      @Deprecated(since="7.0") public static List executeList(Query query, EntityGraph<?> graph)
      Deprecated.
      Since it is not type safe and returns a raw type
      Convenience method for executing the query using the given EntityGraph.
      Parameters:
      query - The JPA Query
      graph - The graph to apply
      API Note:
      Operates on the assumption that the "default" semantic for an entity graph applied to a query is GraphSemantic.FETCH. This is simply knowledge from JPA EG discussions, nothing that is specifically mentioned or discussed in the spec.
    • executeList

      @Deprecated(since="7.0") public static <R> List<R> executeList(TypedQuery<R> query, EntityGraph<R> graph)
      Parameters:
      query - The JPA Query
      graph - The graph to apply
      API Note:
      This signature assumes that the Query's return is an entity and that the graph applies to that entity's type. JPA does not necessarily require that, but it is by far the most common usage.
    • areEqual

      public static <T> boolean areEqual(EntityGraph<T> a, EntityGraph<T> b)
      Compares two entity graphs and returns true if they are equal, ignoring attribute order.
      Type Parameters:
      T - Root entity type of BOTH graphs.
      Parameters:
      a - Graph to compare.
      b - Graph to compare.
    • areEqual

      public static boolean areEqual(AttributeNode<?> a, AttributeNode<?> b)
      Compares two entity graph attribute node and returns true if they are equal, ignoring subgraph attribute order.
    • areEqual

      public static boolean areEqual(Map<Class,Subgraph> a, Map<Class,Subgraph> b)
      Compares two entity subgraph maps and returns true if they are equal, ignoring order.
    • areEqual

      public static boolean areEqual(Subgraph a, Subgraph b)
      Compares two entity subgraphs and returns true if they are equal, ignoring attribute order.