【问题标题】:Querydsl nested query generated an error sqlQuerydsl嵌套查询生成错误sql
【发布时间】:2019-01-04 02:44:37
【问题描述】:

我写了一个简单的嵌套查询

@Autowired
@PersistenceContext
EntityManager entityManager;
@Autowired
Configuration configuration;
private JPASQLQuery<?> queryFactory;

@PostConstruct
public void init() {
    queryFactory = new JPASQLQuery<>(entityManager, configuration);
}

public void student() {

    QStudent student = new QStudent("student");
    QStudent nested = new QStudent("nested");

    List<?> fetch = queryFactory.select(student.id)
            .from(SQLExpressions.select(nested.id)
                    .from(nested), student)
            .fetch();

}

实体结构是这样的

@Entity
@Table(name = "u_student")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}

生成的sql是这样的

选择 student.id 从 u_student(选择 nested.id 从 u_student 嵌套)作为学生

在sql外面加了一个tableName,导致sql语法错误

我错了吗?这样的嵌套查询应该怎么写?

第一次发问题不是很有用,谢谢。

【问题讨论】:

    标签: sql syntax-error querydsl


    【解决方案1】:

    发现使用PathBuilder可以解决这个问题

    完整代码为:

        PathBuilder<Tuple> studentAlias = new PathBuilder<>(Tuple.class,"student");
        QStudent student = new QStudent("student");
        QStudent nested = new QStudent("nested");
    
        List<?> fetch = queryFactory.select(student)
                .from(SQLExpressions.select(nested.id)
                        .from(nested), studentAlias)
                .fetch();
    

    生成的sql:

    select student.id as id1_90_0_
    from (select nested.id from u_student nested) as student
    

    你有更好的计划吗?

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多