0

抱歉标题,但我不知道如何总结问题:\

我有 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 项目中使用它。

如何编写查询以获取当前用户实例的未读消息而不是表中的所有未读消息?

提前致谢。

4

1 回答 1

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();
于 2012-06-12T17:04:16.480 回答