Позвольте мне начать с того, что я не парень из БД.Это просто запутало меня до смерти, но, к сожалению, я был вынужден сделать это на работе, поэтому я немного застрял: -)
Я пытаюсь получить сложный заказ на работу в JPQL, иМне совсем не повезло.
Мой текущий запрос выглядит так:
select distinct msg from CSMessage msg, Error err where msg = err.msg order by err.task.src
Что я пытаюсь сделать, это получить все сообщения с соответствующими ошибкамизатем отсортируйте все целиком, используя исходный документ (err.task.src), чтобы все сообщения с ошибками с одним и тем же источником отображались вместе.
Нет необходимости говорить, что это вообще не работает.Я получаю исключение, которое говорит;«Элемент 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;
}