【发布时间】:2011-07-15 09:13:41
【问题描述】:
我正在尝试使用 eclipselink JPA 检索实体,并且正在寻找一种方法来减少为检索单个实体而运行的查询数量。我相信我应该使用 @JoinFetch 注释来检索与主实体相同的查询中的子实体。这适用于单级连接,但不适用于多级。
在下面的示例中,EntityA 包含 EntityB 的集合,其中包含 EntityC。当我检索 EntityA 时,我想要一个查询来返回所有 3 组实体数据。实际上,它生成 2 个查询,1 个连接 EntityA 和 EntityB,然后一个单独的查询连接 EntityB 和 EntityC。
是否可以将其合并到一个查询中?
class EntityA {
@OneToMany(mappedBy = "entityALink", fetch = FetchType.EAGER)
@JoinFetch
private Collection<EntityB> entityBs;
}
class EntityB {
@JoinColumn(name = "X", referencedColumnName = "Y")
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private EntityA entityALink;
@JoinColumn(name = "A", referencedColumnName = "B")
@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinFetch
private EntityC entityCLink;
}
class EntityC {
@Id
@Basic(optional = false)
@Column(name = "SomeColumn")
private String someField
}
【问题讨论】:
标签: java optimization jpa annotations eclipselink