2011-08-09 4 views
2

나는 다음과 같은 쿼리 SQL 쿼리가 있습니다최대 절전 모드 기준 쿼리

Criteria childCriteriaCategory = criteria.createCriteria("articleCategory", Criteria.INNER_JOIN); 
childCriteriaCategory.add(Restrictions.like("categoryId", categoryId)); 
Criteria childCriteriaTeam = criteria.createCriteria("team", Criteria.LEFT_JOIN);  
childCriteriaTeam.add(Restrictions.in("teamId", teamId)); 
Criterion teamReadOnly = Restrictions.eq("teamReadOnly", true); 
criteria.add(teamReadOnly); 

가 어떻게이 "와"첫 번째 괄호 안에 작성할 수 있습니다

select * from Articles ar 
left join ArticleTeamRelationships atr on atr.ArticleId = ar.ArticleId 
left join Team te on te.TeamId = atr.TeamId 
inner join ArticleCategoryRelationships acr on acr.ArticleId = ar.ArticleId 
inner join ArticleCategory ac on ac.CategoryId = acr.CategoryId 
where ac.CategoryId = 3 
and ((te.TeamId in (1) and ar.TeamReadOnly = 1) or te.TeamId is null) 

이것은 내가 지금까지 쓴 것입니다 및 "또는"?

+0

이거 봤어? http://www.roseindia.net/hibernate/examples/criteria/hibernate-criteria-and-or.html – Holm

+0

네, 본 적이 있습니다. 내 문제는 두 테이블 사이에 "and"를 넣어야한다는 것이고, 어떻게 해야할지 모르겠다. – jorgen

+0

은 별칭을 사용하여 테이블을 나타냅니다. 이러한 모든 변수가 필요하지 않습니다. 유창한 스타일로 작성하면 훨씬 더 읽기 쉽습니다. –

답변

1

당신이 될 것입니다

((te.TeamId in (1) and ar.TeamReadOnly = 1) or te.TeamId is null) 

에 대해 원하는 구조 뭔가 같은 :

Restrictions.or(
    Restrictions.and(
     Restrictions.in(x, x), Restrictions.eq(x, x) 
    ), 
    Restrictions.eq(x,x) 
) 
+0

그냥이 질문을 보았습니다.이 코드는 정확히 여기에 있습니다. 괄호는 실제로 포함되지 않습니다. 따라서 SQL 쿼리는 완전히 평평하지 않고 잘못된 결과를 산출합니다. 적어도 이것은 PostgreSQL에 있습니다. –

0

당신은 가입 할 수있는 첫 번째 and을 배치 할 수 있습니다와 같은 두 번째 :

//pseudo code 
tablea.foreignId = id 

tableb.id = id 
+0

나는 논리를 이해한다. 그러나 이것을 자바로 쓰는 방법을 모른다. Java 코드에서 예제를 제공해 주시겠습니까? – jorgen