我有三个实体,如下所示:
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