hibernate条件查询

hibernate条件查询,hibernate,hibernate-criteria,Hibernate,Hibernate Criteria,我有以下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 ArticleCat

我有以下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”

您可以放置第一个
进行连接,然后放置第二个,如:

//pseudo code
tablea.foreignId = id

tableb.id = id

您想要的结构

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

你查过这个了吗?是的,我见过。我的问题是,我需要在两个表之间放置“and”,但我不知道如何执行此操作。请使用别名来引用该表。您不需要所有这些变量。如果用流畅的风格写,可读性会更好。你能给我举个例子吗?我理解逻辑,但我不知道如何用Java写。你能给我一个java代码的例子吗?我刚刚遇到了这个问题-我这里的代码与此完全一样,只有括号从未包含在内-因此SQL查询生成完全平坦的结果,并产生无效的结果。至少-这是在PostgreSQL下。