Самый быстрый способ получить непрочитанные сообщения пользователя - PullRequest
0 голосов
/ 27 марта 2012

Извините за заголовок, но я не знаю, как обобщить вопрос: \

У меня есть 2 сущности, Пользователь и Сообщение, сопоставленные с моей БД, и я хочу получить быстрый способ получитьвсе непрочитанные сообщения пользователя.

Вот некоторый код:

public class User implements Serializable {
private static final long serialVersionUID = 1L;
[cut]
@OneToMany(cascade = CascadeType.ALL, mappedBy = "dst")
private Collection<Message> rcv;

_

public class Message implements Serializable {
private static final long serialVersionUID = 1L;
[cut]
@Basic(optional = false)
@NotNull
@Column(name = "read")
private boolean read;
@JoinColumn(name = "dst", referencedColumnName = "username")
@ManyToOne(optional = false)
private User dst;

Итак, в общем, мне нужно знать, есть лиспособ избежать такого кода:

List<Message> unread = new LinkedList<Message>();
for(Message m : rcv){
    if(!rcv.read){
        unread.add(rcv);
    }
}

Я знаю, что это можно сделать с помощью запроса, но я не знаю, как использовать его в проекте Java EE.

Как мне написать запрос, чтобы иметь непрочитанные сообщения только текущего экземпляра User, а не ВСЕ непрочитанные сообщения из таблицы?

Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2012

Непрочитанные сообщения для пользователя можно найти, например, с помощью следующего запроса:

User currentUser = ...
List<Message> usersUnreadMessages  = em.createQuery(
            "SELECT m FROM Message m WHERE m.read=FALSE AND m.dst = :dst")
                .setParameter("dst", currentUser)
                .getResultList();
...