我有一个非常独特的查询,让我对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语句,或者那些也有限制吗?
答案 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)
)
)