我正在撰写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)))
答案 0 :(得分:1)
使用hibernate条件的联接,如下面的示例代码:
List cats = session.createCriteria(Cat.class)
.createAlias("kittens", "kit")
.add( Restrictions.like("kit.name", "Iz%") )
.list();
注意:上面的代码只是如何在休眠标准中使用Join的示例。