- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要从 @Query 注释中删除 nativaQuery 标志。
表结构以后可能会发生变化,没有nativeQuery的代码会更容易后期维护。
我有一个类Parent
链接到类 Child
使用@ManyToMany 注释。
类(class)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 ...
@Entity
@Getter
@Setter
@Table(name = "parent")
public class Parent {
@Id
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "parent_child_link",
joinColumns = {@JoinColumn(name = "parent_id")},
inverseJoinColumns = {@JoinColumn(name = "child_id")}
)
@OrderBy("pseudonym ASC")
private List<Child> childs = new ArrayList<>();
}
@Entity
@Getter
@Setter
@Table(name = "child")
public class Child {
@Id
private Long id;
private String pseudonym;
@ManyToMany(mappedBy = "childs")
private Set<Parent> parents = new HashSet<>();
}
public interface ParentRepository extends JpaRepository<Parent, Long> {
@Query(nativeQuery = true, value =
"select p.*" +
" 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)" +
" order by string_agg(c.pseudonym, ',' order by c.pseudonym)")
Page<Parent> find(@Param("name") String name, Pageable pageable);
}
最佳答案
请尝试使用嵌套查询:
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, ',')
关于postgresql - 如何在没有 nativeQuery 标志的@Query 注释中将 string_agg 与 PostgreSQL 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67968753/
我有以下查询: WITH cteCountryLanguageMapping AS ( SELECT * FROM ( VALUES ('Spain',
我尝试在条件生成器中创建一个函数,但执行时得到以下结果。 CriteriaBuilder builder = manager.getCriteriaBuilder(); CriteriaQue
我已下载并安装了 SQL Server 2016。当我尝试使用 STRING_AGG 函数时,收到此错误。这是我的代码: SELECT STRING_AGG(cast(FieldNumber AS V
我运行以下查询 string_agg(DISTINCT grades, '|'),它按 01|02|03|04|05|KG|PK 的顺序执行并输出我的结果。 如何以这种方式重新排列 PK|KG|01|
我想像这样限制 string_agg 结果:- SELECT string_agg(name, ',') FROM table_a WHERE 'condition' LIMIT 5 但是限制部分不起
我有一个查询,在某个时候有两个聚合: string_agg(requirements, '@') as req, string_agg(name, ',') as name 稍后在代码中,我拆分了聚合
我有以下选择 $repairs = DB::select(DB::raw(' select r.id repair_id, w.name, w.surname
我有关系数据库并且想使用 string_agg() 因为它似乎符合我的需要。 我想要: product_id | quiz_id -----------+---------- 1 |
我的 MSSQL 服务器中有一张表,我们称之为 blogPost .我还有两个标签表,让我们称它们为 fooTag和 barTag .标签表用于标记 blogPost结构相同的表。 blogPost
我在 Bigquery 中遇到了 STRING_AGG 问题。 我想: SELECT id, institution, COUNT(DISTINCT institution) OVER (PA
我的查询如下: select u.Id, STRING_AGG(sf.Naziv, ', ') as 'Ustrojstvena jedinica', ISNULL(CONVE
我有一个像这样的表#tmp: recid DefaultDimension DefaultDimensionName line_no 5637423499 Default
我在使用 STRING_AGG 并使用定界符内的表达式时遇到了一个非常奇怪的行为。结果是偏移的(即下一次迭代显示在分隔符所在的位置)。 我有一个包含社区名称的列,我试图将它们连接成一个字符串,以便稍后
我正在尝试按照他们登录的顺序生成一串名称。我有可用的代码,但它很丑陋,我确信我错过了一个更直接的方法。 目标,按照上次登录的顺序返回一串不同的用户名。 我先列出姓名和日期。 我为每个名字选择了最近的一
我用一个函数解决了这个问题,我喜欢我的解决方案,但我想知道是否有一种方法可以不使用函数来解决这个问题。事情是这样的: 有四个表与此相关: entities:系统的实体(租户) members:一个实体
如何对转换后的字段进行排序。有类似的问题,但是我不知道为什么它对我不起作用 -- 'number' 字段是一个整数 string_agg(distinct cast(number as varchar
我正在尝试运行此查询 SELECT u.*, string_agg(CAST(uar.roleid AS VARCHAR(100)), ',') AS roleids, string_agg(CAS
我有三个表。 Students student_id | name 1 Rhon Subjects subject_id | subject_name | student_id
下面的string_agg函数是否可以限制元素个数? string_agg(distinct(tag),', ') 最佳答案 还有两种方式。 1) 从行创建一个数组,限制它,然后连接成字符串: SE
我有一张 table : CREATE TABLE tblproducts ( productid integer, product character varying(20) ) 随着行数: INS
我是一名优秀的程序员,十分优秀!