내 Entity 개체에서 내 쿼리를 만들 때 org.hibernate.criterion.Example.create을 사용하고 있습니다. 모든 것이 정상이지만이 방법을 사용하면 제한 사이의 AND 절을 사용하여 SQL 만 작성됩니다.Hibernate org.hibernate.criterion.Example.create OR 절
org.hibernate.criterion.Example.create을 OR 절과 함께 사용할 수 있습니까?
내 Entity 개체에서 내 쿼리를 만들 때 org.hibernate.criterion.Example.create을 사용하고 있습니다. 모든 것이 정상이지만이 방법을 사용하면 제한 사이의 AND 절을 사용하여 SQL 만 작성됩니다.Hibernate org.hibernate.criterion.Example.create OR 절
org.hibernate.criterion.Example.create을 OR 절과 함께 사용할 수 있습니까?
로 사람들을 선택하는 것 짧은 대답은 아니지만 할 수는 없지만 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);
}
대신 원래 and
의 or
를 참조하십시오.
예, 위의 예에서
session.createCriteria(Person.class) .add(Restrictions.disjunction() .add(Restrictions.eq("name", "James")) .add(Restrictions.eq("age", 20)));
, 클래스 사람이있을 것입니다 수있는 속성은 이름과 나이와 이름 = "제임스"나이 = 20
질문은 생성이나 criterias가 아니라'or'와 함께'Example' 클래스를 사용하는 것에 관한 것입니다. @AVolpe와 정확히 일치하는 –
이 나타납니다. 문제는 예제와 관련이 있습니다. – Santiago
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));
질문은 생성이나 criterias가 아닌'Example' 클래스를'or'과 함께 사용하는 것에 관한 것입니다. –
이 당신에게 도움이 될 수 있습니다 : http://stackoverflow.com/questions/8126589/hibernate-criteria-restrictions-and-or-combination – TonyGW