N.Z*_*ski 1 hibernate join inner-join
我有以下用 HQL 编写的命名查询:
query = "select u from User u " +
"join fetch u.devices d " +
"join fetch u.ipRestrictions ir " +
"join fetch u.employees e where " +
"u.login = :login and " +
"u.enumDataState.id = :dataStateId and " +
"d.enumDataState.id = :dataStateId and " +
"ir.enumDataState.id = :dataStateId and " +
"e.enumDataState.id = :dataStateId ")
Run Code Online (Sandbox Code Playgroud)
当我执行它时,我传递了一个电子邮件和 dataStateId 值。我可以在数据库表中看到,有一个用户具有给定的电子邮件和 dataStateId,但我没有得到任何结果。
查询的目的是join fetch
使用给定电子邮件的活动用户(dataStateId 告诉用户是否活动),其中设备、ipRestrictions 和员工也处于活动状态。
我已经在 stackoverflow 上看到了一些答案,有些建议使用,left join fetch
但left join fetch
也没有用。
我确信有一个用户具有给定的电子邮件和给定的 dataStateId,因为我可以在数据库数据编辑器中看到他。
我怎么能在这里解决这个问题?这是一个巨大的问题,因为我将有很多这样的功能,我需要检查join fetch
使用某些条件的右侧。
我正在使用 Hibernate v5.2。
根据您的评论,您应该使用:
select u from User u
left join fetch u.devices d
left join fetch u.ipRestrictions ir
left join fetch u.employees e
where
u.login = :login and u.enumDataState.id = :dataStateId and
(d is null or d.enumDataState.id = :dataStateId) and
(ir is null or ir.enumDataState.id = :dataStateId) and
(e is null or e.enumDataState.id = :dataStateId)
Run Code Online (Sandbox Code Playgroud)
注意:is null
可能不起作用(取决于 JPA 版本和实现)。您可能需要使用
归档时间: |
|
查看次数: |
2319 次 |
最近记录: |