首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate org.hibernate.criterion.Example.create或子句

Hibernate org.hibernate.criterion.Example.create或子句
EN

Stack Overflow用户
提问于 2014-07-24 02:21:58
回答 3查看 2.5K关注 0票数 2

我使用org.hibernate.criterion.Example.create从实体对象创建查询。一切都很好,但是使用这个方法,SQL只能在限制之间使用AND子句创建。

是否可以使用org.hibernate.criterion.Example.create但带OR子句?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-24 02:42:08

简单来说,答案是否定的,你不能这样做,但是你可以实现一个OrExample,这很容易,只检查Example的源代码并为or修改and (参见源码第329行)。由于这些方法是受保护的,所以您可以扩展它并仅覆盖所需的内容。

就像这样:

代码语言:javascript
复制
public class OrExample extends org.hibernate.criterion.Example {

    @Override
    protected void appendPropertyCondition(
        String propertyName,
        Object propertyValue,
        Criteria criteria,
        CriteriaQuery cq,
        StringBuffer buf)
    throws HibernateException {
        Criterion crit;
        if ( propertyValue!=null ) {
            boolean isString = propertyValue instanceof String;
            if ( isLikeEnabled && isString ) {
                crit = new LikeExpression(
                        propertyName,
                        ( String ) propertyValue,
                        matchMode,
                        escapeCharacter,
                        isIgnoreCaseEnabled
                );
            }
            else {
                crit = new SimpleExpression( propertyName, propertyValue, "=", isIgnoreCaseEnabled && isString );
            }
        }
        else {
            crit = new NullExpression(propertyName);
        }
        String critCondition = crit.toSqlString(criteria, cq);
        if ( buf.length()>1 && critCondition.trim().length()>0 ) buf.append(" or ");
        buf.append(critCondition);
    }

查看or而不是原始的and

票数 1
EN

Stack Overflow用户

发布于 2014-07-24 02:29:45

可以,停那儿吧

代码语言:javascript
复制
session.createCriteria(Person.class) .add(Restrictions.disjunction() .add(Restrictions.eq("name", "James")) .add(Restrictions.eq("age", 20)) );

在上面的示例中,类Person将具有属性name和age,而您将选择具有name = "James“或age = 20的人。

票数 1
EN

Stack Overflow用户

发布于 2014-07-24 02:44:21

SO中的一篇旧文章可能会有所帮助:Hibernate条件限制和/或组合

代码语言:javascript
复制
Criteria criteria = getSession().createCriteria(clazz); 
Criterion rest1= Restrictions.and(Restrictions.eq("A", "X"), 
           Restrictions.in("B", Arrays.asList("X","Y")));
Criterion rest2= Restrictions.and(Restrictions.eq("A", "Y"), 
           Restrictions.eq("B", "Z"));
criteria.add(Restrictions.or(rest1, rest2));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24924112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档