Hibernate criteria 对多个条件的限制
Hibernate criteria restriction on multiple criterias
我正在编写条件查询。我的查询基于与表 属性 和用户相对应的多个条件。 returns 如果 prop 为 12 或 13,无论用户是谁,或者如果 prop 为 NULL,则用户必须是 loggedInUser。
Sql 查询有如下条件 which returns 4 rows
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(criterion,criterion) 将两个标准作为参数。但是,userQuery 上的第二个条件 'crt' 在类型转换时无效 (Criterion)。 Hibernate 会报错。我怎样才能在标准中实现这个功能。或者如何写标准 Restrictions.and(Restrictions.isNull("prop") , userQuery.add(Restrictions.eq("loggedInUser", userId)))
使用休眠标准进行连接,如下例代码所示:
List cats = session.createCriteria(Cat.class)
.createAlias("kittens", "kit")
.add( Restrictions.like("kit.name", "Iz%") )
.list();
注意:上面的代码只是一个如何在hibernate criteria中使用Join的例子。
我正在编写条件查询。我的查询基于与表 属性 和用户相对应的多个条件。 returns 如果 prop 为 12 或 13,无论用户是谁,或者如果 prop 为 NULL,则用户必须是 loggedInUser。 Sql 查询有如下条件 which returns 4 rows
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(criterion,criterion) 将两个标准作为参数。但是,userQuery 上的第二个条件 'crt' 在类型转换时无效 (Criterion)。 Hibernate 会报错。我怎样才能在标准中实现这个功能。或者如何写标准 Restrictions.and(Restrictions.isNull("prop") , userQuery.add(Restrictions.eq("loggedInUser", userId)))
使用休眠标准进行连接,如下例代码所示:
List cats = session.createCriteria(Cat.class)
.createAlias("kittens", "kit")
.add( Restrictions.like("kit.name", "Iz%") )
.list();
注意:上面的代码只是一个如何在hibernate criteria中使用Join的例子。