【问题标题】:Hibernate Associations Criteria All ( Eq, Ne, etc. )Hibernate Associations Criteria All (Eq, Ne, etc.)
【发布时间】:2013-08-09 16:48:07
【问题描述】:

我有一个非常独特的查询,它让我在 Hibernate 中感到有些悲伤。我有以下实体:

class Batch {

  private Set exports;
  private boolean locked;

  ...
}

class Export {

  private bool success;

  ...
}

我正在尝试查询已锁定且没有导出的批次,或者仅在他们所做的所有导出在成功方面都是错误的情况下。我能够创建标准以仅获取至少包含错误的导出的批次,但似乎无法找到文档来检查连接的所有实体是否为错误。此外,我还想要那些以前没有导出的人,发现我可以使用setProjection( Projections.rowCount() ),但这需要运行两次查询。我到目前为止是这样的:

Criteria query = session.createCriteria( Batch.class );
query.add( Restrictions.eq( "locked", true ) );
query.createCriteria( "exports" ).add( Restrictions.ne( "success", true ) );
List results = query.list()

我对 Hibernate 还很陌生,并不完全了解可以做什么和不可以做什么。我希望这使用标准对象来完成,但不反对使用 HQL。如果这不能通过那些可以休眠处理任何 SQL 语句来完成,或者也有限制?

【问题讨论】:

    标签: java sql hibernate orm hibernate-mapping


    【解决方案1】:

    我更喜欢在您的场景中使用 HQL,但我想遵循 Criteria 查询会有所帮助。可能无法完全正常工作,但会给你一些想法。

    Criteria query = session.createCriteria(Batch.class)
            .createAlias("exports", "exports")
            .add( Restrictions.and(
                    Restrictions.eq("locked", true),
                    Restrictions.or(
                            Restrictions.isNotEmpty("exports"),
                            Restrictions.ne("success", true)
                            )
                    )
    

    【讨论】:

    • 虽然我认为我想要 isEmpty,而不是 isNoEmpty,但它在正确的轨道上,但这对我没有好处,因为第二部分仍然返回具有至少一个导出的批次,其中成功不正确。这意味着它可以拥有其他真实的。不过,这是朝着正确方向迈出的一步,谢谢。
    • 是的,你是对的,对不起。如何使用 Subqueries.notExists docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/…
    • 我试图弄清楚,最终我什至无法弄清楚 HQL,不得不在 SQL 中使用子选择来进行调用。
    猜你喜欢
    • 2012-11-15
    • 2011-10-28
    • 2017-03-15
    • 2020-07-11
    • 2020-02-20
    • 2012-01-19
    • 2013-11-12
    • 2013-06-21
    • 2017-02-16
    相关资源
    最近更新 更多