Reputation: 955
I have to create create Criteria or Criterion on specific field myProperity (on class MyClass). I have to choose all objects that have prop = null or satisfy specific Criteria. So I should make something like:
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);
The problem is caused be the facts:
Have you any Idea how to deal with it?
Upvotes: 5
Views: 45139
Reputation: 1121
Restrictions.eqOrIsNull(propertyName, value) method can be used to handle null values.
Upvotes: 0
Reputation: 4691
Check if value provided in criteria
is null
by check isNull
and apply to your criteria
as following
criteria.add(Restrictions.isNull("parentId"));
Upvotes: 3
Reputation: 71
Just for anyone else with this question. I had a similar issue where I wanted to check if an associated collection was empty and if not restrict by ID. To achieve this, the following helped me (updated code for newer version of 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)));
So this allows the following:
Upvotes: 7
Reputation: 1177
Something like this helped me:
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")));
This answer helped me: https://stackoverflow.com/a/2208458
Upvotes: 6
Reputation: 4870
You can get answer of all question here this will help you
for ex if your MyClass like
class MyClass{
private long id;
private String myProperity;
.
.
.
setter & getter
}
here you null issue is solved and this'll oring with other criterias.
Criteria criteria = session.createCriteria(MyClass.class);
Disjunction disjunction = Restrictions.disjunction();
disjunction.add(Restrictions.isNull("myProperity"));
criteria.add(disjunction);
criteria.add(Restrictions.eq("id", value));
Upvotes: 10