gpt4 book ai didi

jpa - JPQL 中的复杂顺序

转载 作者:行者123 更新时间:2023-12-05 08:02:43 27 4
gpt4 key购买 nike

首先声明我不是数据库专家。这些东西把我搞糊涂了,但不幸的是我在工作中被迫这样做,所以我有点卡住了:-)

我试图通过在 JPQL 中工作来获得一个复杂的订单,但我一点运气都没有。

我当前的查询如下所示:

select distinct msg from CSMessage msg, Error err where msg = err.msg order by err.task.src

我试图用它完成的是获取所有带有相关错误的消息,然后使用源文档 (err.task.src) 对整个事情进行排序,以显示所有具有相同来源的错误消息在一起。

不用说这根本不起作用。我得到一个异常(exception)说; “ORDER BY 项目应该在 SELECT DISTINCT 列表中”

我查看了文档和其他资源,其中似乎没有任何可以帮助我的东西。

谁能指出我正确的方向?

谢谢

编辑 1:

实体看起来像这样:

CSMessage

public class CSMessage extends BaseModel implements Serializable{    private static final long serialVersionUID = 1L;        .        .        .        Other fields not shown for brevity        .        .        .    @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })    @JoinColumn(name = "TASK_ID")    private Task task;}

错误:

public class Error{    private static final long serialVersionUID = 1L;    @Column(name = "ERR_STRING", length = 255)    private String errString;    @Column(name = "ERR_TYPE")    private Integer errType;    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })    @JoinColumn(name = "MSG_ID")    private CSMessage msg;    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })    @JoinColumn(name = "SRC_ID")    private CommonSource src;    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })    @JoinColumn(name = "TASK_ID")    private Task task;}

任务

public class Task{    private static final long serialVersionUID = 1L;    @Column(name = "CORRELATION_UUID", length = 36)    private String correlationId;    @Column(name = "CURRENT_NODE", length = 255)    private String currentNodeName = "empty";    @Column(name = "PROCESS_NAME", length = 255)    private String processName = "empty";    @Column(name = "SITE_ID", length = 10)    private String siteId = "1";    @OneToOne(fetch = FetchType.LAZY)    @JoinColumn(name = "SRC_ID")    private CommonSource src;}

最佳答案

您有多种选择:

从 CSMessage msg 中选择不同的 msg,Error err where msg = err.msg order by err.task.src

  • 将 err.task.src 添加到 select 子句 (select msg, err.task.src) 并更改方法中的返回类型

  • 在内存中排序而不是 bd,使用接口(interface) Comparable(实现 Comparable 并使用 Collections.sort)

  • 您也可以使用 criteriaQuery 或 nativeQuery

关于jpa - JPQL 中的复杂顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4148040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com