gpt4 book ai didi

java - 带有 where 子句的内连接 querydsl

转载 作者:行者123 更新时间:2023-11-30 10:37:25 31 4
gpt4 key购买 nike

假设我有这个表 service_providers,它通过 enterprise_id 列进行 self 引用。

 id            enterprise_id

102 57
103 57



public class ServiceProvider {
....
@ManyToOne
@JoinColumn(name = "enterprise_id")
private ServiceProvider enterprise;
}

我想做的是让 enterprise_id 获取所有 servive_providers。这在 SQL 中非常简单:

  select sp1.id
from service_providers sp1
inner join service_providers sp2 on (sp1.enterprise_id=sp2.id)
where sp2.id=57;

但是当尝试通过 query-dsl 复制它时,我不知何故遇到了问题。

这是它的样子:

  QServiceProvider serviceProvider2 = new   QServiceProvider("serviceProvider2");
QServiceProvider serviceProvider3 = new QServiceProvider("serviceProvider3");



query.from(serviceProvider2)
.innerJoin(serviceProvider3)
.on(serviceProvider2.enterprise.id.eq(serviceProvider3.id))
.where(serviceProvider3.id.eq(enterpriseId))
.list(serviceProvider2.id);

这是 hibernate 生成的:

 select  sp1.id 
from service_providers sp0
cross join service_providers sp1
inner join service_providers sp2 on (sp1.enterprise_id=sp2.id)
where sp0.id=? and sp2.id=?

除了错误之外,这有点令人困惑。

谁能告诉我我做错了什么?

最佳答案

基本上,在 querydsl 论坛的人的帮助下,这里是重要的部分: 纯 JPA 方法是在连接中使用“关联路径”,我使用的是“根实体”,它JPA 2.1 规范不允许

正确的查询应该是这样的:

 query.from(serviceProvider2)
.innerJoin(serviceProvider2.enterprise, serviceProvider3)
.where(serviceProvider3.id.eq(enterpriseId))
.list(serviceProvider2.id);

关于java - 带有 where 子句的内连接 querydsl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40157070/

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