Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa JPQL中的复杂orderby_Jpa_Jpql - Fatal编程技术网

Jpa JPQL中的复杂orderby

Jpa JPQL中的复杂orderby,jpa,jpql,Jpa,Jpql,让我先说我不是DB的人。这件事把我弄糊涂了,但不幸的是,我在工作中被骗了,所以我有点被卡住了:-) 我试图通过在JPQL中工作来获得一个复杂的订单,但我一点运气都没有 我当前的查询如下所示: select distinct msg from CSMessage msg, Error err where msg = err.msg order by err.task.src 从CSMessage msg、Error err中选择distinct msg,其中msg=err.msg order by

让我先说我不是DB的人。这件事把我弄糊涂了,但不幸的是,我在工作中被骗了,所以我有点被卡住了:-)

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

我当前的查询如下所示:

select distinct msg from CSMessage msg, Error err where msg = err.msg order by err.task.src 从CSMessage msg、Error err中选择distinct msg,其中msg=err.msg order by err.task.src 我试图用它来完成的是获取所有带有相关错误的MSG,然后使用源文档(err.task.src)对整个事情进行排序,以获得所有带有相同源的错误消息一起显示

不用说,这根本不起作用。我得到一个例外,说:;“按项目排序应在选择不同列表中”

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

谁能给我指出正确的方向吗

谢谢

编辑1:

实体如下所示:

select distinct msg from CSMessage msg, Error err where msg = err.msg order by err.task.src 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; } 公共类CSMessage扩展BaseModel实现可序列化 { 私有静态最终长serialVersionUID=1L; . . . 为简洁起见,未显示其他字段 . . . @manytone(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST,CascadeType.MERGE}) @JoinColumn(name=“TASK\u ID”) 私人任务; } 错误:

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; } 公共类错误 { 私有静态最终长serialVersionUID=1L; @列(name=“ERR_STRING”,长度=255) 私有字符串errString; @列(name=“ERR\u TYPE”) 私有整数类型; @manytone(cascade={CascadeType.PERSIST,CascadeType.MERGE}) @JoinColumn(name=“MSG\u ID”) 私人消息消息消息; @manytone(cascade={CascadeType.PERSIST,CascadeType.MERGE}) @JoinColumn(name=“SRC\u ID”) 私人共享资源; @manytone(cascade={CascadeType.PERSIST,CascadeType.MERGE}) @JoinColumn(name=“TASK\u ID”) 私人任务; } 任务

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; } 公开课任务 { 私有静态最终长serialVersionUID=1L; @列(name=“CORRELATION\u UUID”,长度=36) 私有字符串correlationId; @列(name=“CURRENT_NODE”,长度=255) 私有字符串currentNodeName=“empty”; @列(name=“PROCESS\u name”,长度=255) 私有字符串processName=“empty”; @列(name=“SITE\u ID”,长度=10) 私有字符串siteId=“1”; @OneToOne(fetch=FetchType.LAZY) @JoinColumn(name=“SRC\u ID”) 私人共享资源; }
您有几个选择:

从CSMessage msg、Error err中选择distinct msg,其中msg=err.msg order by err.task.src

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

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

  • 您还可以使用criteriaQuery或nativeQuery


如果您唯一的问题是对结果列表排序,那么一种方法是在全局字段中添加@OrderBy(默认顺序为ASC,可以省略):

@OrderBy(“您的列名”)

如果需要降序,语法将为:

@OrderBy(“您的列名称描述”)

例如:

@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name = "TASK_ID")
@OrderBy("TASK_ID") // <-------- ASC
private Task task;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SRC_ID")
@OrderBy("SRC_ID DESC") // <-------- DESC
private CommonSource src;
@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name=“TASK\u ID”)
@OrderBy(“TASK_ID”)//请显示您的实体(它们之间的关联)。