Java 将Postgres查询转换为JPQL
如何将下面的PostreSQL查询转换为JPQL?我主要坚持用行数、分区和when caseJava 将Postgres查询转换为JPQL,java,postgresql,hibernate,jpql,Java,Postgresql,Hibernate,Jpql,如何将下面的PostreSQL查询转换为JPQL?我主要坚持用行数、分区和when case 我们可以看看你们目前的情况吗?从产品p左键选择p,c左键加入选择c.Product.id,c.status,c.startDate行号,按产品id划分,按案例状态“过期”,然后2个其他1个结束asc,开始日期描述为合同c行号,按p.id上的c.Product.id c=c.Product.id,c.row行号=1订单按p.id,c.起始日期@尼莱什贾达夫,恐怕这行不通。在JPQL中,您只能连接实体而不能
我们可以看看你们目前的情况吗?从产品p左键选择p,c左键加入选择c.Product.id,c.status,c.startDate行号,按产品id划分,按案例状态“过期”,然后2个其他1个结束asc,开始日期描述为合同c行号,按p.id上的c.Product.id c=c.Product.id,c.row行号=1订单按p.id,c.起始日期@尼莱什贾达夫,恐怕这行不通。在JPQL中,您只能连接实体而不能连接子查询,并且只能通过映射的关系路径f.ex进行连接。如果产品在合同属性上有@manytone合同,您可以使用。。。从产品p加入p合同c…-请注意,未指定ON。此外,JPQL中不支持窗口函数。@POZ非常感谢您提供的信息。@NileshJadav尽管您的问题在我看来是一个经典问题-其中一些解决方案可能在JPQL中有代表性。
select p, c from product p left join
(
select
c.product_id, c.id, c.status, c.start_date,
row_number() over (partition by product_id order by (case status when 'EXPIRED' then 2 else 1 end) asc, start_date desc) as row_number
from contract c
order by product_id
) c
on
p.id = c.product_id and c.row_number = 1
order by p.id, c.start_date;