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

标签 java sql querydsl

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

 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/

相关文章:

java - 如何将 JSON 格式的数据转换为 GraphQL 查询格式

java - 为什么我的if语句未返回正确的结果?

mysql - MySQL 错误加入 WHERE 子句

sql - 根据计数列中的最高值为每个 ID 选择 3 个值

Java:Unicode 未通过 graphics.drawString(...) 正确转换为文本

Java GUI Windows 根本不出现

php - 添加限制加速 mysql 查询,为什么?

java - 如何让 IDEA 自动导入定义了 Annotation Processors 的 pom.xml

java - Generic querydsl orderBy 带左连接的动态路径生成

android - 在 Android 中使用 SQL 查询生成器库/框架