gpt4 book ai didi

mysql - Hibernate 生成交叉连接而不是左连接

转载 作者:行者123 更新时间:2023-11-29 06:51:12 24 4
gpt4 key购买 nike

我正在使用 hibernate 3.6.10.Final 和 MySQL 5.5。

我写了一个这样的动态查询:

"from " + clazz.getName()+ " ORDER BY "+sortField+" "+sortDirection

我的 hibernate 实体具有多对一的父/子关系。如果查询按父字段排序,hibernate 生成此 hql select:

select parent0_.ID as ID10_, parent0_.ID_CHILD as ID6_10_ 
from parent parent0_
order by parent0_.PARENTFIELD ASC

如果查询是由子字段排序的,我有以下 hql:

select parent0_.ID as ID10_, parent0_.ID_CHILD as ID6_10_
from parent parent0_
cross join child1_
where parent0_.ID_CHILD = child1_.ID
order by child1_.CHILDFIELD ASC

第二个查询返回的结果较少,因为 parent0_.ID_CHILD 可以为 null。有没有办法强制 hibernate 生成左连接?

我需要这样的东西

select parent0_.ID as ID10_,
parent0_.ID_CHILD as ID6_10_
from
parent parent0_
left join
child child1_
on
parent0_.ID_CHILD = child1_.ID
order by child1_.CHILDFIELD ASC

最佳答案

感谢 JB Nizet,我解决了这样编写查询的问题:

String[] tokens = sortField.split("\\.");
for(int i=0;i<tokens.length-1;i++)
{
sortby+=" LEFT JOIN parent"+i+"."+tokens[i]+" as child"+i;
}
sortby+=" ORDER BY child"+(tokens.length-2)+"."+tokens[tokens.length-1]+" "+sortDirection;
...
String query = "select parent0 FROM " + clazz.getName()+" as parent0 "+ sortby;

关于mysql - Hibernate 生成交叉连接而不是左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com