최대 절전 모드에서 기준 쿼리를 사용할 때 어떻게 기준을 함께 "OR"합니까?

StackOverflow https://stackoverflow.com/questions/57484

  •  09-06-2019
  •  | 
  •  

문제

최대 절전 모드 기준 쿼리를 사용하여 세 필드에 대해 기본 "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)));

조건은 OR / 및 Disjunction을 사용하여 다른 수준의 쿼리를 사용하여 적용 할 수 있습니다.

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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top