SpringJpa: Как получить список объекта с уникальным или первым полем - PullRequest
0 голосов
/ 29 мая 2018

У меня есть класс сущностей под названием Message:

    @Entity
@Table(name = "Message")
public class Message extends DefaultEntity {


    @Valid
    @ManyToOne(targetEntity = User.class)
    @JoinColumn(name="sender")
    private User sender;

    @Valid
    @ManyToOne(targetEntity = User.class)
    @JoinColumn(name="receiver")
    private User receiver;


    @NotNull
    private String message;

    @Enumerated(EnumType.STRING)
    private MessageStatus messageStatus;

    private Boolean isRead;
}

по тому, как я удалил методы получения и установки, так что это не будет так долго.

Я хочу получить списокчаты, где MessageStatus имеет значение «READ», а отправитель уникален / последний / последний (поскольку между двумя конкретными пользователями (отправителем и получателем) может быть много записей), я хочу, чтобы последняя запись вводилась в базу данных на основе созданной даты.

Я попробовал это, но я застрял, потому что я не знаю, как заставить приложение получить одного отправителя на основе созданной даты;

List<Message> findMessagesByMessageStatusAndReceiver(Enum.MessageStatus messageStatus, User Receiver);

, так что теперь у меня есть некоторая возможность сообщениясохранился в моей базе данных, как это;

{date, sender, receiver} , {2/5/7, 1, 2}, {2/6/7, 1, 2}, {2/8/7, 1, 2}, {2/9/7, 1, 2} , {2/5/7, 4, 2}, {2/5/7, 5, 2} , {2/5/7, 10, 2}, {1/5/7, 10, 2}, {2/3/7, 10, 2}

................ Мне нужна ситуация, когда я могу получить все сообщения, но с уникальной записью, когда имеется более одной записи стот же отправитель, поэтому в этой ситуации, когда у нас есть более одной записи с одинаковым идентификатором отправителя: {2/5/7, 1, 2}, {2/6/7, 1, 2}, {2/8/7, 1, 2}, {2/9/7, 1, 2} выбирается только один на основе недавней даты и добавляется в список, поэтому {2/9/7, 1, 2} выбирается, а также дляэто {2/5/7, 10, 2}, {1/5/7, 10, 2}, {2/3/7, 10, 2} это {2/5/7, 10, 2} выбрано,поэтому в конце дня мой список: {2/9/7, 1, 2}, {2/5/7, 4, 2}, {2/5/7, 5, 2}, {2/5/ 7, 10, 2}

1 Ответ

0 голосов
/ 29 мая 2018

Для этого вы можете использовать два метода запроса: findFirstBy.. и findTopBy...Эти два ключевых слова используются для ограничения результатов запроса.

Вы можете проверить ссылку для примеров.

Редактировать

Сделайте запрос, подобный этому:

Message findFirstBySenderOrderByDate(Sender sender)

, с которым вы найдете самую последнюю запись для отправителя.Затем извне вы можете зациклить всех отправителей и вызвать метод запроса для каждого из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...