Hibernate标准限制多个标准

时间:2016-08-19 14:06:31

标签: java hibernate hibernate-criteria criteria-api

我正在撰写Criteria查询。我的查询是关于对应于表属性和用户的多个标准。如果prop为12或13,则返回结果,无论用户是谁,如果prop为NULL,则用户必须登录用户。 Sql查询的where条件如下,返回4行

where (property.PROP in (12,13) or (property.PROP is null
                 and user.loggedInUser = 'XYZ'))

我的标准

Criteria userQuery = session.createCriteria(User.class);
Criteria propertyQuery = userQuery .createCriteria("property");

  Criterion crt = (Criterion) userQuery.add(Restrictions.eq("loggedInUser", userId));

propertyQuery.add(
            Restrictions.or( 
                 Restrictions.in("prop",propList),
                    Restrictions.and(Restrictions.isNull("prop"),crt)
                            )
                 );

我的问题是Restrictions.and(标准,标准)将两个标准作为参数。但是,第二个标准是' crt'类型转换时,userQuery无效(Criterion)。 Hibernate会给出错误。如何在Criteria中实现此功能。或如何编写标准Restrictions.and(Restrictions.isNull("prop") , userQuery.add(Restrictions.eq("loggedInUser", userId)))

1 个答案:

答案 0 :(得分:1)

使用hibernate条件的联接,如下面的示例代码:

 List cats = session.createCriteria(Cat.class)
     .createAlias("kittens", "kit")
     .add( Restrictions.like("kit.name", "Iz%") )
     .list();

注意:上面的代码只是如何在休眠标准中使用Join的示例。