将条件查询与休眠一起使用时,如何将条件"或者"在一起?

时间:2020-03-05 18:51:46  来源:igfitidea点击:

我正在尝试使用休眠条件查询在三个字段上执行基本的"或者"操作。

例子

class Whatever{
 string name;
 string address;
 string phoneNumber;
}

我想建立一个条件查询,其中我的搜索字符串可以匹配"名称"或者"地址"或者" phoneNumber"。

解决方案

回答

我们想使用Restrictions.disjuntion()。像这样

session.createCriteria(Whatever.class)
    .add(Restrictions.disjunction()
        .add(Restrictions.eq("name", queryString))
        .add(Restrictions.eq("address", queryString))
        .add(Restrictions.eq("phoneNumber", queryString))
    );

请在此处查看Hibernate文档。

回答

假设我们要进行休眠会话,则应执行以下操作:

Criteria c = session.createCriteria(Whatever.class);
Disjunction or = Restrictions.disjunction();
or.add(Restrictions.eq("name",searchString));
or.add(Restrictions.eq("address",searchString));
or.add(Restrictions.eq("phoneNumber",searchString));
c.add(or);

回答

以防万一有人为NHibernate遇到同样的问题时偶然发现:

ICriteria c = session.CreateCriteria(typeof (Whatever))
    .Add(Expression.Disjunction()
        .Add(Expression.Eq("name", searchString))
        .Add(Expression.Eq("address", searchString))
        .Add(Expression.Eq("phoneNumber", searchString)));