[英]join fetch not working in Hibernate Query Language
我想检索一个数据库命中中的所有记录,为此,我正在使用join fetch语句,这是我的查询
String q = "SELECT oneChat from " + Chat.class.getName() + " oneChat "
+ " join fetch oneChat.user1 "
+ " join fetch oneChat.user2 "
+ " join fetch oneChat.user3 "
+ " join fetch oneChat.groupData "
+ "where oneChat.dmlStatus != :dmlStatusValue"
+ " AND group_id = :groupIdValue" + " AND reference_id = 0"
+ " AND root_chat_id = oneChat.chatId";
我的表中总共有4个外键/联接,所以我添加了联接提取语句,但是它不起作用,即如果删除联接提取语句,我什么也不返回任何结果。 默认情况下,我对表联接的访存是Eager(未将其更改为Lazy)。
日志文件中也没有sql语法错误。 我有什么想念的吗?
更新:这是因为第二个连接,即user2返回null,所以我没有得到任何数据。 现在,如果有人可以告诉我如何应对这个问题,那么查询应该是独立的,它不应该依赖数据。
如果无论数据是否存在于依赖项上,都希望返回结果,则应使用左联接而不是内部联接(联接获取等于内部联接获取):
"SELECT oneChat from " + Chat.class.getName() + " oneChat "
+ " left join fetch oneChat.user1 "
+ " left join fetch oneChat.user2 "
+ " left join fetch oneChat.user3 "
+ " left join fetch oneChat.groupData "
+ "where oneChat.dmlStatus != :dmlStatusValue"
+ " AND group_id = :groupIdValue" + " AND reference_id = 0"
+ " AND root_chat_id = oneChat.chatId";
现在,当OneChat对数据库没有任何user2依赖关系时,无论如何查询都将返回结果。
只是在一边..如果使用前缀,则为清楚起见,请尝试在where子句的group_id
和root_chat_id
字段中添加前缀。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.