Hibernate 如何在querydsl中编写子查询?

Hibernate 如何在querydsl中编写子查询?,hibernate,spring-data-jpa,querydsl,Hibernate,Spring Data Jpa,Querydsl,我在我的项目中使用了querydsl、hibernate和spring数据jpa。我编写了这个本机查询,工作正常。但是如何在querydsl中编写这个查询呢 List<OpenChart> openChartList = (List<OpenChart>) getEntityManager() .createNativeQuery( "select * from (select * from open_chart order by id desc ) open_chart

我在我的项目中使用了querydsl、hibernate和spring数据jpa。我编写了这个本机查询,工作正常。但是如何在querydsl中编写这个查询呢

List<OpenChart> openChartList = (List<OpenChart>) getEntityManager()
.createNativeQuery( "select * from (select * from open_chart order by id desc ) open_chart where user_id="+userId+" group by patient_chart_id order by id",OpenChart.class).getResultList();

我准备了一个示例,说明如何在与您描述的类似场景中使用子查询,希望您能提供帮助并为其实现提供依据:

    SQLQuery sqlQuery = new SQLQuery(connection, PostgresTemplates.builder().quote().newLineToSingleSpace()
            .printSchema().build());

    ListSubQuery<Tuple> listSubQuery = new SQLSubQuery().from(QUsersPasswords.usersPasswords).orderBy(QUsersPasswords.usersPasswords.usuNummat.desc()).list(QUsersPasswords.usersPasswords.all());

    QUsersPasswords qSubquery = new QUsersPasswords("subquery");

    sqlQuery.from(listSubQuery.as("subquery")).limit(10);

    sqlQuery.list(qSubquery.all());
你需要使用

2.1.13。子查询要创建子查询,请创建JPASubQuery实例,通过from、where等定义查询参数并使用 用于创建子查询的唯一或列表,该子查询只是类型安全的 查询的Querydsl表达式。“唯一”用于“唯一” 单一结果和列表用于列表结果

对于基于Hibernate的子查询用法,请使用HibernateSubQuery 相反


我不认为这个问题有资格被否决,而不是得到答案。我想使用querydsl转换这段代码,因为我在项目中使用了大部分querydsl。我搜索了querydsl子查询示例,但没有找到合适的示例。所以我把我的问题放在这里。谢谢。我正试图根据您的示例listSubQuery listSubQuery=new JPASubQuery.fromQOpenChart.openChart.orderByQOpenChart.openChart.id.desc.listQOpenChart.openChart实现。;QOpenChart QOpenChart=新的QOpenChart子查询;List openCharts=pageableQuerypageable.fromEntityPath listSubQuery.assubquery.Where QoPenchart.userId.EqualId.groupByqOpenChart.patientChart.id.orderByqOpenChart.id.asc.listqOpenChart;在第1行,我找不到任何all方法,在最后一行,它要求实体,其中listsubquery是元组列表exception@SantoshNarna,我的示例是用于本机查询的QueryDSL SQL。如果您需要一个对象,您应该使用QueryDSL JPA。例如,您的返回应该是ListSubQuery,而不是ListSubQuery。我不需要任何项目与querydsl jpa运行一些测试,对不起。
 QEmployee employee = QEmployee.employee; 
 QEmployee e = new QEmployee("e"); 
 query.from(employee)
      .where(employee.weeklyhours.gt(
           new JPASubQuery().from(employee.department.employees, e)
                            .where(e.manager.eq(employee.manager))
                            .unique(e.weeklyhours.avg())
       )).list(employee);