Java 创建HQL查询,该查询将获取集合中的每个项并对其进行比较

Java 创建HQL查询,该查询将获取集合中的每个项并对其进行比较,java,hibernate,hql,Java,Hibernate,Hql,我有以下HQL查询 SELECT ob FROM objectBase ob WHERE size(ob.listSC) > 0 AND ob.listSC.registrationDate BETWEEN :startDate AND :endDate 它应该做什么: 获取数据库中的所有objectBase对象,其中listSC(一组实体)不是null,并且为空(遗憾的是,无法找出如何使其也成为null值) 对于列表中的每个项目,请检查特定实体在给定日期之间是否具有registrati

我有以下HQL查询

SELECT ob FROM objectBase ob WHERE size(ob.listSC) > 0 AND ob.listSC.registrationDate BETWEEN :startDate AND :endDate
它应该做什么:

  • 获取数据库中的所有objectBase对象,其中listSC(一组实体)不是null,并且为空(遗憾的是,无法找出如何使其也成为null值)
  • 对于列表中的每个项目,请检查特定实体在给定日期之间是否具有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)
    
    我相信这是有充分理由的。问题是如何实施这种行为? 最好不使用联接


    提前感谢。

    如果您需要任何帮助,请尝试下面的查询让我知道

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

    请尝试下面的查询,如果您需要任何帮助,请告诉我

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

    因为ob.listSC是一个集合,没有财产注册日期,这正是问题所在!查询对我来说也不是很好,但我不知道如何重新编写它,因为ob.listSC是一个集合,没有属性RegistrationDate,这正是问题所在!这个查询对我来说也不太好,但我不知道如何重新编写它。它似乎很有效,非常感谢!顺便说一句,如何从listSC的查询中消除空值,使其只包括不为空的ob.listSC?或者
    size(ob.listSC)>0
    是否只处理集合隐式不为null且至少有一项的对象?它隐式支持它。它似乎可以工作,非常感谢!顺便说一句,如何从listSC的查询中消除空值,使其只包括不为空的ob.listSC?或者
    size(ob.listSC)>0
    是否只处理集合隐式不为null且至少有一个项的对象?它隐式支持它。