Как получить все объекты, сгруппированные по идентификатору? - PullRequest
0 голосов
/ 07 октября 2019

Я использую spring-jpa и использую диспетчер сущностей для сохранения.

Я занимаюсь разработкой приложения Spring и пытаюсь извлечь все сущности, которые сохранились до определенного времени, сгруппировав их по их идентификатору.

Попробовал следующий запрос внутри createQuery с помощью entitymanager

"Select se From SampleEntity se where se.createdDate > :elapsedTime group by se.uid"

Модель выглядит следующим образом:

class SampleEntity
{

@Id
private String uid;      //Cannot be null

@Id
private String uid2;     //Should be unique, 

//also combo of uid, uid2 should be unique

private String name;

private Date createdDate;

private Date updatedDate;

}

Предположим, следующие данные в db

Uid     Uid2     Name     CreatedDate            UpdatedDate
A-123   X-123     AX      10/6/2019 10:00:00AM   10/6/2019 10:00:00AM
A-123   X-124     AX      10/6/2019 10:00:20AM   10/6/2019 10:00:20AM
B-124   Y-125     BY      10/6/2019 10:01:00AM   10/6/2019 10:01:00AM
B-124   Y-126     BY      10/6/2019 10:01:20AM   10/6/2019 10:01:20AM

Фактический результат:

Продолжайте получать ошибку "не группа по выражению"

Ожидается:

Я хочу, чтобы объект был извлечен как группы Uid.

Итак, я хочу иметь возможность запрашивать и извлекать список из 2 объектов, каждый из которых, в свою очередь, будет списком / массивом объектов с одинаковым идентификатором пользователя.

Объект 1 - будет содержать2 образца объектов-сущностей, которые будут содержать данные из следующих 2 строк: A-123 X-123 AX 06.10.2009 10:00:00 AM 10/9/2019 10:00:00 AM A-123 X-124 AX 10 /6/2019 10:00:20 6/10/2019 10:00:20

1025 * Объект 2 - будетtain 2 образца объектов-сущностей, которые будут содержать данные из следующих 2 строк: B-124 Y-125 BY 06.10.2009 10:01:00 AM 10/6/2019 10:01:00 AM B-124 Y-126 BY 10/ 6/2019 10:01:20 10/06/2019 10:01:20 AM

Возможно ли это? Если да, то как? Чего мне не хватает?

1 Ответ

0 голосов
/ 07 октября 2019

При использовании GROUP BY в предложении SELECT может использоваться только функция группировки столбцов или агрегатов (COUNT ...), как и в запросах SQL. Этот пример будет правильным запросом, он приведет к списку uid.

Select se.uid From SampleEntity se where se.createdDate > :elapsedTime group by se.uid

Однако его запрос не позволит вам получить список списка объектов, так как группировка SQL не работаеттаким образом, и я не думаю, что это возможно с JPA. Вам нужно будет сделать обычный запрос и построить вложенные списки в слое сервиса.

...