Hibernate Associations Criteria All(Eq,Ne等)

时间:2013-08-09 16:48:07

标签: java sql hibernate orm hibernate-mapping

我有一个非常独特的查询,让我对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。如果不能用hibernate处理任何SQL语句,或者那些也有限制吗?

1 个答案:

答案 0 :(得分:0)

我更喜欢在你的场景中使用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)
                        )
                )