【问题标题】:Creating a HQL query which would take each item in a collection and compare it创建一个 HQL 查询,它将获取集合中的每个项目并进行比较
【发布时间】:2019-09-16 14:49:57
【问题描述】:

我有以下 HQL 查询

SELECT ob FROM objectBase ob WHERE size(ob.listSC) > 0 AND ob.listSC.registrationDate BETWEEN :startDate AND :endDate

它应该做什么:

  1. 获取数据库中所有 objectBase 对象,其中 listSC(实体集合)不为 nullempty >(不幸的是无法弄清楚如何使其也包含空值)
  2. 对于 listSC 中的每个项目,检查特定实体在给定日期之间是否具有 registrationDate 属性。

但不幸的是它给了我

Caused by: org.hibernate.QueryException: illegal attempt to dereference collection [objectbase0_.id.listSC] with element property reference [registrationDate]
at org.hibernate.hql.internal.ast.tree.DotNode$1.buildIllegalCollectionDereferenceException(DotNode.java:73)

我相信这是有充分理由的。问题是如何实现这种行为? 最好不要使用 JOINs

提前致谢。

【问题讨论】:

  • 因为 ob.listSC 是一个集合并且没有属性registrationDate
  • 这正是问题所在!查询对我来说也不好看,但我不知道如何重写它

标签: java hibernate hql


【解决方案1】:

如果您需要任何帮助,请尝试以下查询。

SELECT ob FROM objectBase ob left join ob.listSC sc WHERE size(ob.listSC) > 0 AND sc.registrationDate BETWEEN :startDate AND :endDate

【讨论】:

  • 好像有效,非常感谢!顺便说一句,我如何也从 listSC 的查询中消除 null 值,所以它只会包括不为空的 ob.listSC ?还是size(ob.listSC) > 0 只处理集合不为空且至少包含一项的对象?
  • 隐式支持。
猜你喜欢
  • 2021-07-28
  • 2019-10-25
  • 2011-06-27
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
相关资源
最近更新 更多