From 0ff4438731c6f25dfdd19e5b2d70f7b3a5667241 Mon Sep 17 00:00:00 2001 From: Athou Date: Thu, 27 Jun 2013 10:13:07 +0200 Subject: [PATCH] utility methods for enabling query cache and read only queries --- .../com/commafeed/backend/dao/GenericDAO.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/commafeed/backend/dao/GenericDAO.java b/src/main/java/com/commafeed/backend/dao/GenericDAO.java index f6b295c2..8bece550 100644 --- a/src/main/java/com/commafeed/backend/dao/GenericDAO.java +++ b/src/main/java/com/commafeed/backend/dao/GenericDAO.java @@ -13,6 +13,7 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; import javax.persistence.metamodel.Attribute; +import org.hibernate.Query; import org.hibernate.Session; import com.commafeed.backend.model.AbstractModel; @@ -117,14 +118,23 @@ public abstract class GenericDAO { } protected List findByField(Attribute field, V value) { + return findByField(field, value, false); + } + + protected List findByField(Attribute field, V value, + boolean cache) { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); query.where(builder.equal(root.get(field.getName()), value)); + TypedQuery q = em.createQuery(query); + if (cache) { + cache(q); + } return em.createQuery(query).getResultList(); } - protected void limit(TypedQuery query, int offset, int limit) { + protected void limit(TypedQuery query, int offset, int limit) { if (offset > -1) { query.setFirstResult(offset); } @@ -133,6 +143,16 @@ public abstract class GenericDAO { } } + protected TypedQuery readOnly(TypedQuery query) { + query.unwrap(Query.class).setReadOnly(true); + return query; + } + + protected TypedQuery cache(TypedQuery query) { + query.unwrap(Query.class).setCacheable(true); + return query; + } + @SuppressWarnings("unchecked") protected Class getType() { return (Class) type.getRawType();