如何在hibernate中查询父节点时过滤子实体

时间:2012-08-30 06:06:23

标签: hibernate hql parent-child

让我们说我有两个实体

public class EntityA
{
   @id
   @GeneratedValue
   @Column(name="id")
   private Long id;

   @OneToMany(mappedBy="EntityA")
   @JoinColumn(name = "entityA_id")
   private List<EntityB> entityBList;


} 

public class EntityB
{
  @Column(name = "MODEL_PERCENT")
  private BigDecimal modelPercent;

  @ManyToOne
  @joincolumn(name="entityA_id") 
  private EntityA entityA;

}

我现在想要的是,当我获取EntityA时,我想添加一个where子句来获取其modelPercent大于0的所有EntityBs。

我不想使用过滤器,因为此要求仅针对此特定情况。

例如数据:

 EntitytA table
 id 
  1
EntityB table
 id   EntitytA_Id  modelPercent
  1      1           10
  2      1           0

我需要一种方法,可能是一个hql来获取EntityA,这样当我说EntityA.getEntityBList()时 它应该只返回1条记录(其中一个模型的百分比为10(大于零))。

我尝试了以下查询,但它似乎无法正常工作。即它返回来自entityB的记录

select a from EntityA a,IN( a.EntityBList) b where a.id =:id and b.modelPercent>0   

对某些例子的任何建议或指示都会有很大帮助。

由于

1 个答案:

答案 0 :(得分:0)

1)你在测绘中有错误 EntityA - 同时具有财产和字段访问权限 EntityB - 没有ID,同时具有属性和字段访问权限 2)HQL查询

SELECT eA FROM EntityA LEFT JOIN eA.entityBList eB WHERE eA.id =:id AND eB.modelPercent > 0