我正在尝试获取员工详细信息,其中的empltype是职员,其加入日期是最近的。
在SQL Server 2008中查询的结果如下:
class2
我使用SpringData JPA作为我的持久层,使用QuerylDSL,Specification和Predicate来获取数据。
我试图在QueryDSL或Specification中转换上述查询,但无法正确挂钩它们。
员工实体:
select
*
from
employee jj
inner join
(
select
max(join_date) as jdate,
empltype as emptype
from
employee
where
empltype='clerk'
group by empltype
) mm
on jj.join_date=mm.jdate and jj.empltype=mm.emptype;
规范类中的谓词方法:
int seqid;(sequence id)
String empltype:
Date joindate;
String role;
应该在// ** //中编写哪些代码来将SQL查询转换为JPA谓词。返回Page的@ Query,NamedQuery或QueryDSL之类的任何其他Spring Data JPA也适用于我。
提前致谢
答案 0 :(得分:1)
我在记事本中写了这个并且它没有经过测试,但我认为你正在寻找像
这样的东西QEmployee e1 = new QEmployee("e1");
QEmployee e2 = new QEmployee("e2");
PathBuilder<Object[]> eAlias = new PathBuilder<Object[]>(Object[].class, "eAlias");
JPASubQuery subQuery = JPASubQuery().from(e2)
.groupBy(e2.empltype)
.where(e2.empltype.eq('clerk'))
.list(e2.join_date.max().as("jdate"), e2.emptype)
jpaQuery.from(e1)
.innerJoin(subQuery, eAlias)
.on(e1.join_date.eq(eAlias.get("jdate")), e1.emptype.eq(eAlias.get("emptype")))
.list(qEmployee);