如何在字段上创建可以为null的Criteria?

M31*_*314 4 hibernate hibernate-criteria

我必须在特定字段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);
Run Code Online (Sandbox Code Playgroud)

问题是由事实造成的:

  1. 我不能将Criteria添加到Disjunction(对于Disjunction只能添加一个Criterion),所以line:disjunction.add(specificCriteria); 是错的
  2. 我不能以某种方式修改specificCriteria,接受null因为我不能在null上制作标准.(它给了我NullPointerException)

你有什么想法如何处理它?

Yog*_*ati 10

你可以在这里得到所有问题的答案,这将对你有所帮助

如果你的MyClass喜欢的话

class MyClass{
   private long id;
   private String myProperity;
   .
   .
   .
   setter & getter
}
Run Code Online (Sandbox Code Playgroud)

在这里你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));
Run Code Online (Sandbox Code Playgroud)


小智 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)));
Run Code Online (Sandbox Code Playgroud)

所以这允许以下内容:

  1. 没有特许经营权的工作人员
  2. 拥有来自allowedFranchises系列ID的特许经营的员工


Dav*_*vid 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")));
Run Code Online (Sandbox Code Playgroud)

这个答案对我有帮助:https : //stackoverflow.com/a/2208458