我必须在特定字段 myProperity (在课程 MyClass 上)创建条件或标准。我必须选择 prop = null 或满足特定条件的所有对象。所以我应该做类似的事情:
Criteria criteria = this.sessionManager.getCurrentSession().createCriteria(MyClass.class);
specificCriteria = criteria.createCriteria('myProperity');
/* definition of specificCriteria */
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(Restrictions.isNull('myProperity'));
disjunction.add(specificCriteria);
criteria.add(disjunction);
问题是由事实造成的:
你有什么想法如何处理它?</ p>
答案 0 :(得分:10)
你可以在这里得到所有问题的答案 这会对你有所帮助
如果你的MyClass喜欢
class MyClass{
private long id;
private String myProperity;
.
.
.
setter & getter
}
这里你的null问题已经解决了,这将与其他标准一起解决。
Criteria criteria = session.createCriteria(MyClass.class);
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(Restrictions.isNull("myProperity"));
criteria.add(disjunction);
criteria.add(Restrictions.eq("id", value));
答案 1 :(得分:7)
对于有这个问题的其他人。我有一个类似的问题,我想检查关联的集合是否为空,如果不是由ID限制。为了实现这一点,以下帮助我(更新的hibernate版本的更新代码):
Criteria criteria = getSession().createCriteria(StaffMember.class);
criteria.createAlias("franchises", "franchises", JoinType.LEFT_OUTER_JOIN)
.add(Restrictions.or(
Restrictions.isEmpty("franchises"),
Restrictions.in("franchises.id", allowedFranchises)));
所以这允许以下内容:
答案 2 :(得分:6)
这样的事情对我有所帮助:
final Criteria c = session.createCriteria(House.class)
// Houses may not have doors.
.createAlias("door", "door", CriteriaSpecification.LEFT_JOIN)
// Door may be null, but if it isn't it must be blue.
.add(Restrictions.or(Restrictions.isNull("door"), Restrictions.eq("door.color", "blue")));
这个答案对我有帮助:https://stackoverflow.com/a/2208458
答案 3 :(得分:1)
通过检查criteria
检查null
中提供的值是否为isNull
,并按照以下说明将其应用于您的criteria
criteria.add(Restrictions.isNull("parentId"));
答案 4 :(得分:0)
Restrictions.eqOrIsNull(propertyName,value)方法可用于处理空值。