jpa - JPQL 中的复杂顺序

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

我试图通过在 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

https://stackoverflow.com/questions/4148040/

相关文章:

python-3.x - 如何在 Panel (3D Blender 2.55) 中创建 UI "i

image-processing - 合并 povray 的任意大小的部分图像

ruby-on-rails - 如何在命名空间内部的 View 中呈现命名空间外部的 Rails 部

.net - NET 4.0 在 COM+ 中安装程序集加载额外的依赖项

.net - 通过 RDP 部署 .NET 应用程序

indexing - 如何生成(书籍)索引?

bash - 使用转义序列呈现文本(如终端)

eclipse - 卸载eclipse插件报错

visual-studio-2010 - 如何将 const wchar_t* 转换为 wchar_

wordpress - 将 Wordpress URL 路径转换为查询字符串