java - 惰性关系中的急切查询?

标签 java jpa lazy-loading eager-loading

我有一个具有如下惰性关系的实体:

@Getter
@Entity
@Table(name = "entity")
@SequenceGenerator(name = "seq_entity", sequenceName = "seq_entity", allocationSize = 1)
@DynamicUpdate
public class Entity {

    @Id
    @Column(name = "id_entity")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_entity")
    private Long id;

    @Setter
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_relation1")
    private Relation1 relation1;

    @Setter
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_relation2")
    private Relation2 relation2;

    // ...
}

当我进行查询来加载其他关系时,我必须像这样指定它们:

返回jpaQuery() .select(qEntity) 。清楚的() .from(qEntity) .innerJoin(qEntity.relation1).fetchJoin() .leftJoin(qEntity.relation2).fetchJoin() .fetch();

但我想加载它们而不指定到一个查询的左连接和内连接...... 有一种方法可以在一个查询中以急切模式加载所有内容吗?是否可以针对一个查询停用 FetchType.LAZY

我在想类似的事情

返回jpaQuery() .select(qEntity) 。清楚的() .from(qEntity) .fetchEager();

最佳答案

您可以使用实体图来实现这一点。它将是这样的:

EntityGraph<Post> entityGraph = entityManager.createEntityGraph(YourEntity.class);
entityGraph.addAttributeNodes("relation1");
entityGraph.addAttributeNodes("relation2");

并在查询中

TypedQuery<Post> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.setHint("javax.persistence.loadgraph", entityGraph);
Post post = typedQuery.getSingleResult();

这可以用命名实体图(在实体上)括起来

@NamedEntityGraph(
  name = "entity-with-all-relations",
  attributeNodes = {
    @NamedAttributeNode("relation1"),
    @NamedAttributeNode("relation2"),
  },

因此重复使用了很多次。为此,您可以使用 EntityManager#getEntityGraph

关于java - 惰性关系中的急切查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56066075/

相关文章:

reactjs - 如何延迟加载 "import { SelectedComponent } from {Library}"?

java - 如何在 Spring Boot 之上编写框架(即编写 Spring Boot 应用程序而不实现某些接口(interface))

java - JPA 查询 IN 子句对具有 CSV 值的列不返回准确的结果

java - CF8 SSL 连接到 Postgres 失败

java - 在 JPA 的多对多关系中使用组合键

java - 如何使用 Querydsl 更新 JPA 实体?

jQuery-使某个图像类不受延迟加载的影响

angular - PrimeNG 使用异步管道延迟加载数据

java - 还原哈希码 "sum"

java - 从代码点整数列表生成 String 对象?