Uch*_*nwu 5 java persistence jpa jpa-2.0
我有三个实体如下:
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
}
Run Code Online (Sandbox Code Playgroud)
现在,给定一个Entity of EntityA,我想得到一个EntityC列表.我目前有两种选择.我不知道哪一个更优化.选项是:
1.
select c from EntityC c where c.entityb in (select b from EntityB b where b.entitya = :entitya)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这两个查询中的哪一个更容易和优化?
这取决于集合的大小。对于小型集合,我将使用对象模型中的关系。更多地从设计/可用性的角度而不是性能的角度来看,它更加面向对象。我不会加入获取它,只是正常访问模型。您可能还应该建立从 A 到 B 的关系,以使您的模型更有用。
对于#1中的查询,使用子选择的查询效率不是很高,只需使用联接,
从 EntityC c 中选择 c,其中 c.entityb.entitya = :entitya
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |