2

私は次のクエリSQLクエリを持っています:

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)

これは私がこれまでに書いたものです:

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);

最初の角かっこ内に「and」と「or」を書くにはどうすればよいですか?

4

2 に答える 2

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)
)
于 2011-08-12T12:38:13.673 に答える
0

最初andに参加を行い、2番目を次のように配置できます。

//pseudo code
tablea.foreignId = id

tableb.id = id
于 2011-08-09T10:54:41.350 に答える