我在我的项目中使用过querydsl,hibernate和spring data 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();
答案 0 :(得分:2)
我准备了一个如何在类似场景中使用子查询的示例,希望您可以提供帮助并为其实现提供基础:
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());
答案 1 :(得分:2)
您需要使用JPASubQuery
来自manual 的
2.1.13。子查询要创建子查询,请创建JPASubQuery实例,通过from,where等定义查询参数并使用 unique或list来创建子查询,这只是一种类型安全的 查询的Querydsl表达式。 unique用于独特的 (单个)结果和列表结果列表。
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);
对于基于Hibernate的子查询用法,请使用HibernateSubQuery 代替。