【问题标题】:Hibernate criteria using and/or together使用和/或一起休眠标准
【发布时间】:2012-07-17 16:37:15
【问题描述】:

我需要为此 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 = 150)

role_ids 将具有值组合 (101,102,150,151) 仅当 Role_Id 为 150 或 151 时,OR 部分才需要存在。

USER_ROLE 表具有 Role_idstate_id。只有角色 101 和 102 与 state_ids 相关联。

如果所有 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 是正确的。

【问题讨论】:

  • 你能展示你使用连词和析取词的尝试吗?
  • 它看起来类似于下面的示例代码。你想让我把我要工作的实际代码放在上面吗?

标签: hibernate criteria


【解决方案1】:

这样的东西应该可以工作 - 用相应的限制替换“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 显示如下:
  • 无论如何要删除所有这些额外的括号还是可以?再次感谢!
  • 不确定,额外的括号通常不会产生影响。您是否得到错误的结果或执行计划不同?你能接受答案吗,如果
  • 没有。我得到了正确的结果,但看到那些额外的括号很烦人,看起来我错过了一些东西。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多