2014-05-22 4 views
0

나는 Nhibernate에 대해 매우 새롭기 때문에 어리석은 것처럼 보일 수 있습니다. SearchParams은 몇 가지 속성이 ID 및 쿼리하는 데 사용됩니다 Name 말을 가지고 내 클래스,이 경우쿼리의 Nhibernate 조합

Public List<Data> GetResultData(SearchParams[] searchparams) {} 

:

는 제가 쿼리를 만들기 위해 필요에 따라 매개 변수를 수신하는 기능을 가지고있다. 내가 제기하는 SearchParams의 속성을 기준으로 쿼리 을해야

  1. :

    그래서 여기에 내가 직면하고이 문제입니다. searchParams 배열의 한 개체는 다음과 같이 말한다 :

    ID, NAME 
    "34", "" 
    

    우리가 값이없는 NAME을 볼 수 있듯이. 따라서 내 쿼리는 다음과 같아야합니다.

    select * from DB where ID ="34". 
    

    쿼리는 런타임에 사용 가능한 값을 기반으로 만들어 져야합니다. 두 가지 속성을 모두 사용할 수 있다면 둘 다 AND이됩니다.

  2. 입력이 검색 매개 변수의 배열이기 때문에 개체 수만큼 쿼리가 발생합니다. 나는이 모든 쿼리를 하나의 UNION으로 만들고 한 번에 해고 할 수있는 방법을 생각하려고합니다.

생각들?

답변

-1

불연속이라고 불리는 일련의 제한은 불연속이라고 불립니다. 에 연결된 제한 시퀀스가 ​​연결이라고합니다. 을 그래서 여기 간다 :

그래서, 당신이 필요가 세 번째 조건

하나 개의 결합은 첫 번째, 두 번째, 세 번째 조건을 연결하는 하나의 분리입니다

Criterion startInRange = Restrictions.between("expectedStartCanonicDate", rangeStart, rangeEnd); 

Criterion endInRange = Restrictions.between("expectedCompletionCanonicDate", rangeStart, rangeEnd); 

Criterion thirdCondition = 
    Restrictions.conjunction().add(Restrictions.le("expectedStartCanonicDate", rangeStart)) 
           .add(Restrictions.ge("expectedCompletionCanonicDate", rangeEnd)); 

Criterion completeCondition = 
    Restrictions.disjunction().add(startInRange) 
           .add(endInRange) 
           .add(thirdCondition); 

criteria.add(completeCondition);