当前位置: 首页 > 面试题库 >

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

濮阳默
2023-03-14
问题内容

可以说我有两个实体

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

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

谢谢


问题答案:

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


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


 类似资料:
  • 问题内容: 我想问一下是否有可能使用hibernate方式做到这一点。假设我已经运行了HQL并检索了一个集合。是否可以使用hibernate进一步过滤它? 我试图在标头类中使用,并在查询之前添加session.enable(),但似乎无法正常工作。 样例代码 精简HQL 问题答案: 不。至少不是您问的方式。一旦您要求Hibernate(使用方法)访问数据库,Hibernate就发挥了作用,结果现在

  • 问题内容: 我要删除,因此要从数据库中删除行。 我 确实 要删除某个实体及其所有行。不过,我 不 希望从它删除任何行。 如何 我能做到这一点? 是,并且是我要删除的实体。 请参阅下面的代码,了解我如何在“狗窝实体”中链接2: 目前,当我删除狗entitie(S),其相关的养犬实体 中 也被删除。 编辑:将狗映射到狗窝: 问题答案: 当前,当我删除狗实体时,其相关的狗窝实体也将被删除。 原因是您已设

  • 问题内容: 我在使用Hibernate创建子查询时遇到问题。不幸的是Subqueries类几乎完全没有文档,因此我完全不知道如何将以下SQL转换为Hibernate Criteria: 我希望以下内容能够“正常工作”: 但不幸的是,事实并非如此。因此,看来我实际上必须使用Subqueries类来创建Criteria。但是我无法通过Google找到一个合理的例子,因此这使我在这里提出了疑问。 问题答

  • 问题内容: 一级缓存与hibernate中的查询缓存是否不同?我看过有关第一级和查询缓存的文章,所以我很困惑。 问题答案: 默认情况下,第一级缓存处于启用状态,并且基于每个会话。默认情况下,查询缓存未启用,它在多个会话之间共享,应始终与二级缓存一起使用。 要启用查询缓存,应使用以下属性:

  • 问题内容: 我有一个具有以下字段的MySQL表: 其中父字段表示上层ID。例如,水果id是1,橙色是水果之一,因此父对象是1。 但是我想做一个有效的MySQL查询来获取所有记录,格式为parent-> children-> parent-> children格式。我怎样才能做到这一点? 查询的结果记录应类似于: 问题答案: 您需要mysql不支持的递归联接。您唯一可以做的就是确定最大深度(由于p-

  • 问题内容: 我需要使用detachedCriteria进行此SQL查询: 这个想法是从不属于用户的游戏中获取ID。我尝试了与detachedCriteria类似的10种不同方法,但得到了“未知实体:null” MappingException代码应类似于: 还设置投影以仅返回游戏的ID。 有任何想法吗?我认为Hibernate在加入没有别名的查询时会遇到一些麻烦。添加别名是可行的,但结果是完全错误