Hibernate 使用和/或同时休眠条件

Hibernate 使用和/或同时休眠条件,hibernate,criteria,Hibernate,Criteria,我需要为此SQL编写一个hibernate标准: select distinct USER_ID from USER_ROLE where USER_TERM_DT is null and ((ROLE_ID in (101,102) and STATE_ID in ('MD')) or ROLE_ID = 150) 角色\u id将有一组值(101102150151) 仅当角色Id为150或151时,OR部件才需要存在 用户角色表具有角色id&状态id。只有角色101和102与状态I

我需要为此SQL编写一个hibernate标准:

select distinct USER_ID from USER_ROLE  
where USER_TERM_DT is null 
and ((ROLE_ID in (101,102) 
and STATE_ID in ('MD')) or ROLE_ID = 150)
角色\u id将有一组值(101102150151) 仅当角色Id为150或151时,OR部件才需要存在

用户角色表具有角色id&状态id。只有角色101和102与状态ID关联

如果所有4个role_id值都存在,则SQL将如下所示:

select distinct USER_ID from USER_ROLE  
where USER_TERM_DT is null 
and ((ROLE_ID in (101,102) 
and STATE_ID in ('MD')) or ROLE_ID in (150,151))

请帮忙处理这件事。我在读一篇文章,我需要同时使用连接和分离,但就是不能写出正确的代码。希望这很清楚&我的SQL是对的。

类似的方法应该可以工作-用相应的限制替换'is null'和'in'表达式

criteria.conjuction()
        .add(USER_TERM_DT is null )
        .add(criteria.disjuction().
                 add(
                   criteria.conjuction()
                            .add(ROLE_ID in (101,102) )
                            .add(STATE_ID in ('MD'))
                 )
                 .add(ROLE_ID in (150,151))
         )

类似的方法应该可以工作-用相应的限制替换'is null'和'in'表达式

criteria.conjuction()
        .add(USER_TERM_DT is null )
        .add(criteria.disjuction().
                 add(
                   criteria.conjuction()
                            .add(ROLE_ID in (101,102) )
                            .add(STATE_ID in ('MD'))
                 )
                 .add(ROLE_ID in (150,151))
         )

你能展示一下你使用连接和分离的尝试吗?它看起来与下面的示例代码相似。你想让我把实际的代码,我得到的工作?你能展示你在使用连接和分离的尝试吗?它看起来类似于下面的示例代码。你想让我把实际的代码,我得到的工作?谢谢卡马尔。它起作用了!但是SQL显示了类似的内容:从USER_ROLE中选择不同的USER_ID,其中SER_TERM_DT为null并且((((((?,?)中的ROLE_ID和(?)中的STATE_ID)或(?)中的ROLE_ID))是否有任何方法删除所有这些额外的括号,或者这样可以吗?再次非常感谢!不确定,额外的括号通常没有什么区别。您是否得到了错误的结果或执行计划不同?如果没有,你能接受这个答案吗。我得到了正确的结果,但是看到那些额外的括号很烦人&看起来我遗漏了什么。谢谢Kamal。它起作用了!但是SQL显示了类似的内容:从USER_ROLE中选择不同的USER_ID,其中SER_TERM_DT为null并且((((((?,?)中的ROLE_ID和(?)中的STATE_ID)或(?)中的ROLE_ID))是否有任何方法删除所有这些额外的括号,或者这样可以吗?再次非常感谢!不确定,额外的括号通常没有什么区别。您是否得到了错误的结果或执行计划不同?如果没有,你能接受这个答案吗。我得到了正确的结果,但是看到那些额外的括号很烦人&看起来我遗漏了什么。