繁体   English   中英

渴望查询中的惰性关系?

[英]Eager query in a lazy relation?

我有一个具有这种惰性关系的实体:

@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;

    // ...
}

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

return jpaQuery() .select(qEntity) .distinct() .from(qEntity) .innerJoin(qEntity.relation1).fetchJoin() .leftJoin(qEntity.relation2).fetchJoin() .fetch();

但是我想在不指定的情况下将它们加载到一个查询的左联接和内部联接中...有一种方法可以在一个查询的渴望模式下全部加载? 是否可以为一个查询FetchType.LAZY

我在想类似

return jpaQuery() .select(qEntity) .distinct() .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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM