2

假设我有两个实体

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   

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

谢谢

4

1 回答 1

0

1) 您在映射
EntityA时出错- 同时具有属性和字段访问权限
EntityB - 没有 ID 并且同时具有属性和字段访问权限
2) HQL 查询是

SELECT eA FROM EntityA LEFT JOIN eA.entityBList eB WHERE eA.id =:id AND eB.modelPercent > 0
于 2012-08-30T08:30:31.443 回答