Skip to content

Instantly share code, notes, and snippets.

@Eugeny
Created May 11, 2011 19:57
Show Gist options
  • Save Eugeny/967205 to your computer and use it in GitHub Desktop.
Save Eugeny/967205 to your computer and use it in GitHub Desktop.
public List<MessageItem> search(User user, String query, Integer from, Integer count) {
String like = new StringBuilder().append("%").append(query).append("%").toString().toUpperCase();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MessageToUser> cq = cb.createQuery(MessageToUser.class);
Root<MessageToUser> mtur = cq.from(MessageToUser.class);
cq.select(mtur);
Predicate p1 = cb.like(cb.upper(mtur.join(MessageToUser_.message).get(Message_.subject)), like);
Predicate p2 = cb.like(cb.upper(mtur.join(MessageToUser_.message).get(Message_.text)), like);
Predicate p3 = cb.like(cb.upper(mtur.join(MessageToUser_.message).join(Message_.author).get(User_.lastName)),
like);
Predicate p4 = cb.like(cb.upper(mtur.join(MessageToUser_.message).join(Message_.author).get(User_.name)), like);
Predicate p5 = cb.like(
cb.upper(mtur.join(MessageToUser_.message).join(Message_.author).get(User_.patronymicName)), like);
Predicate p6 = cb.like(cb.upper(mtur.join(MessageToUser_.recipient).get(User_.lastName)), like);
Predicate p7 = cb.like(cb.upper(mtur.join(MessageToUser_.recipient).get(User_.name)), like);
Predicate p8 = cb.like(cb.upper(mtur.join(MessageToUser_.recipient).get(User_.patronymicName)), like);
Predicate mine = cb.equal(mtur.join(MessageToUser_.message).get(Message_.author), user);
Predicate toMe = cb.equal(mtur.get(MessageToUser_.recipient), user);
cq.where(cb.and(cb.or(mine, toMe), cb.or(p1, p2, p3, p4, p5, p6, p7, p8)));
TypedQuery<MessageToUser> q = em.createQuery(cq);
if (from != null) {
q.setFirstResult(from);
q.setMaxResults(count);
}
List<MessageItem> result = new ArrayList<MessageItem>();
for (MessageToUser mtu : q.getResultList()) {
MessageItem item = new MessageItem(mtu.getMessage());
item.setRead(mtu.getIsRead());
result.add(item);
}
Collections.sort(result);
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment