2014-07-24 7 views
2

내 Entity 개체에서 내 쿼리를 만들 때 org.hibernate.criterion.Example.create을 사용하고 있습니다. 모든 것이 정상이지만이 방법을 사용하면 제한 사이의 AND 절을 사용하여 SQL 만 작성됩니다.Hibernate org.hibernate.criterion.Example.create OR 절

org.hibernate.criterion.Example.create을 OR 절과 함께 사용할 수 있습니까?

+0

이 당신에게 도움이 될 수 있습니다 : http://stackoverflow.com/questions/8126589/hibernate-criteria-restrictions-and-or-combination – TonyGW

답변

1

로 사람들을 선택하는 것 짧은 대답은 아니지만 할 수는 없지만 OrExample을 구현할 수 있습니다. 매우 쉽습니다. Example의 소스 코드 만 확인하고 or (sourcecode 329 행 참조)을 and으로 변경하십시오. 메소드가 보호되어 있으므로이를 확장하여 필요한 것만 겹쳐 쓸 수 있습니다. 이 같은

뭔가 :

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); 
    } 

대신 원래 andor를 참조하십시오.

1

예, 위의 예에서

session.createCriteria(Person.class) .add(Restrictions.disjunction() .add(Restrictions.eq("name", "James")) .add(Restrictions.eq("age", 20))); 

, 클래스 사람이있을 것입니다 수있는 속성은 이름과 나이와 이름 = "제임스"나이 = 20

+1

질문은 생성이나 criterias가 아니라'or'와 함께'Example' 클래스를 사용하는 것에 관한 것입니다. @AVolpe와 정확히 일치하는 –

+0

이 나타납니다. 문제는 예제와 관련이 있습니다. – Santiago

0

SO에서 이전 게시물이 도움이 될 수 있습니다 : Hibernate Criteria Restrictions AND/OR combination

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)); 
+0

질문은 생성이나 criterias가 아닌'Example' 클래스를'or'과 함께 사용하는 것에 관한 것입니다. –