对不起标题,但我不知道如何总结这个问题:\
我有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实例的未读消息,而不是来自表中的所有未读消息?
提前致谢。
答案 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();