获取用户未读消息的最快方法

时间:2012-03-27 08:49:26

标签: java-ee orm mapping ejb named-query

对不起标题,但我不知道如何总结这个问题:\

我有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 :(得分:0)

可以找到用户的未读邮件,例如以下查询:

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