我有如下三个实体:
public class EntityA
{
private Long id;
//Getters and setters
}
public class EntityB
{
private Long id;
private EntityA entitya;
//Getters and setters
}
public class EntityC
{
private Long id;
private BigDecimal amount;
private EntityB entityb;
//Getters and setters
}
现在,给定一个 EntityA 实例,我想获得一个 EntityC 列表。我目前有两个选择。我不知道哪个更优化。选项是:
1.
select c from EntityC c where c.entityb in (select b from EntityB b where b.entitya = :entitya)
2。 向 EntityB 添加新属性
private Set<EntityC> entityCCol;
@OneToMany(mappedBy="entityb")
public Set<EntityC> getEntityCCol()
{
return entityCCol;
}
select b from EntityB a join fetch a.entityCCol b
这两个查询中哪个更简单和优化?
最佳答案
这取决于集合的大小。对于小型集合,我会使用对象模型中的关系。更多的是从设计/可用性的角度而不是性能,它更面向对象。我不会加入获取它,只是正常访问模型。您可能还应该建立从 A 到 B 的关系,以使您的模型更有用。
对于 #1 中的查询,您的查询使用子选择不是很有效,只需使用连接,
从 EntityC c 中选择 c,其中 c.entityb.entitya = :entitya
关于java - 如何优化 JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11447180/