spring-data-jpa 如何在没有nativeQuery标志的@Query注解中使用string_agg和PostgreSQL?

polkgigr  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(160)

我需要从@Query注解中删除nativeQuery标志。
表结构将来可能会更改,不使用nativeQuery的代码将使以后的维护更容易。
我有一个Parent类,它通过@ManyToMany注解链接到Child类。Child类有一个pseudonym字段,它是String类型的值。
查询的结果需要按Child类中的String值排序,我必须对它进行排序,然后将其连接成一个String值。
如果我没有在string_agg函数中添加额外的排序,那么在@Query注解中没有nativeQuery标志的查询就可以工作:
order by string_agg(c.pseudonym, ',')
如果我添加了如下所示的其他必需排序,则会发生异常

  • order by string_agg(c.pseudonym, ',' order by c.pseudonym)
  • org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'order' near line 1, column ...

第一个

4dbbbstv

4dbbbstv1#

请尝试使用嵌套查询:

select p.*
from (
    select p, string_agg(c.pseudonym, ',' order by c.pseudonym) ord
    from parent p
    left join parent_child_link link on p.id = link.parent_id
    left join child c on link.child_id = c.id
    where p.name = :name
    group by (p.id)
) inn(p, ord)
order by ord

或:

select p.*
from(
    select p, c.pseudonym
    from parent p
    left join parent_child_link link on p.id = link.parent_id
    left join child c on link.child_id = c.id
    where p.name = :name
    order by p, pseudonym
) inn(p, pseudonym)
group by p.id
order by string_agg(pseudonym, ',')

相关问题