반응형
최대 절전 모드에서 조건 쿼리를 사용할 때 조건을 어떻게 "OR"합니까?
최대 절전 조건 쿼리를 사용하여 세 가지 필드에서 기본 "OR"을 수행하려고합니다.
예
class Whatever{
string name;
string address;
string 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))
);
최대 절전 세션이 있다고 가정하면 다음과 같은 것이 작동합니다.
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);
//Expression : (c1 AND c2) OR (c3)
Criteria criteria = session.createCriteria(Employee.class);
Criterion c1 = Restrictions.like("name", "%e%");
Criterion c2 = Restrictions.ge("salary", 10000.00);
Criterion c3 = Restrictions.like("name", "%YYY%");
Criterion c4 = Restrictions.or(Restrictions.and(c1, c2), c3);
criteria.add(c4);
// (c1 OR c2) AND c3 또는 복잡한 표현식에 대해 동일한 작업을 수행 할 수 있습니다.
//Expression : (c1 AND c2) OR (c3)
Criteria criteria = session.createCriteria(Employee.class);
Criterion c1 = Restrictions.like("name", "%e%");
Criterion c2 = Restrictions.ge("salary", 10000.00);
Criterion c3 = Restrictions.like("name", "%YYY%");
Criterion c4 = Restrictions.or(Restrictions.and(c1, c2), c3);
criteria.add(c4);
//Same thing can be done for (c1 OR c2) AND c3, or any complex expression.
누군가 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)));
조건은 또는 /를 사용하여 적용 할 수 있으며 분리를 사용하여 쿼리의 여러 수준에서 적용 할 수 있습니다.
Criteria query = getCriteria("ENTITY_NAME");
query.add(Restrictions.ne("column Name", current _value));
Disjunction disjunction = Restrictions.disjunction();
if (param_1 != null)
disjunction.add(Restrictions.or(Restrictions.eq("column Name", param1)));
if (param_2 != null)
disjunction.add(Restrictions.or(Restrictions.eq("column Name", param_2)));
if (param_3 != null)
disjunction.add(Restrictions.or(Restrictions.eq("column Name", param_3)));
if (param_4 != null && param_5 != null)
disjunction.add(Restrictions.or(Restrictions.and(Restrictions.eq("column Name", param_4 ), Restrictions.eq("column Name", param_5 ))));
if (disjunction.conditions() != null && disjunction.conditions().iterator().hasNext())
query.add(Restrictions.and(disjunction));
return query.list();
This is what worked for me for an OR condition, that too with an IN condition and not the answer up-voted most on this discussion:
criteria.add( Restrictions.or(
Restrictions.eq(ch.getPath(ch.propertyResolver().getXXXX()), "OR_STRING"),
Restrictions.in(ch.getPath(ch.propertyResolver().getYYYY()), new String[]{"AA","BB","CC"})
));
Resulting Query:
and (
this_.XXXX=?
or this_.YYYY in (
?, ?, ?
)
)
반응형
'programing tip' 카테고리의 다른 글
Xcode / iOS 시뮬레이터 : 중요한 위치 변경을 수동으로 트리거 (0) | 2020.10.18 |
---|---|
python-requests 모듈의 모든 요청을 기록합니다. (0) | 2020.10.18 |
JavaScript 또는 jQuery 문자열이 유틸리티 함수로 끝남 (0) | 2020.10.18 |
쉘 명령을 통해 mysql 데이터베이스를 삭제하는 방법 (0) | 2020.10.18 |
django urlresolvers reverse를 사용하여 GET 매개 변수를 전달하는 방법 (0) | 2020.10.18 |