一尘不染

如何在休眠中查询父级时过滤子级实体

hibernate

可以说我有两个实体

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的EntityB。

我不想使用过滤器,因为此要求仅适用于这种特殊情况。

例如数据:

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

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

我试过下面的查询,但它似乎不起作用。即,它从entityB返回两个记录

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

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

谢谢


阅读 215

收藏
2020-06-20

共1个答案

一尘不染

1)您在映射
EntityA时遇到 错误- 实体B同时 具有属性和字段访问权限-
实体 ID没有ID,并且同时具有属性和字段访问权限
2)HQL查询是

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