added findByUuidWithoutFlush method
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / common / CdmEntityDaoBase.java
index 508e22c024c5dba9f0331a3a2cd0ad1b9ba6bfb6..b627fe229fe22f21de47e2d22fdae58b47981634 100644 (file)
@@ -24,6 +24,7 @@ import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.SortField;\r
 import org.apache.lucene.util.Version;\r
 import org.hibernate.Criteria;\r
 import org.apache.lucene.search.SortField;\r
 import org.apache.lucene.util.Version;\r
 import org.hibernate.Criteria;\r
+import org.hibernate.FlushMode;\r
 import org.hibernate.HibernateException;\r
 import org.hibernate.LockMode;\r
 import org.hibernate.NonUniqueObjectException;\r
 import org.hibernate.HibernateException;\r
 import org.hibernate.LockMode;\r
 import org.hibernate.NonUniqueObjectException;\r
@@ -354,6 +355,34 @@ public abstract class CdmEntityDaoBase<T extends CdmBase> extends DaoBase implem
             return results.get(0);\r
         }\r
     }\r
             return results.get(0);\r
         }\r
     }\r
+    \r
+    @Override\r
+    public T findByUuidWithoutFlush(UUID uuid) throws DataAccessException{\r
+       Session session = getSession();         \r
+       FlushMode currentFlushMode = session.getFlushMode();\r
+       try {                   \r
+               // set flush mode to manual so that the session does not flush\r
+               // when before performing the query\r
+               session.setFlushMode(FlushMode.MANUAL);\r
+               Criteria crit = session.createCriteria(type);\r
+               crit.add(Restrictions.eq("uuid", uuid));\r
+               crit.addOrder(Order.desc("created"));\r
+               List<T> results = crit.list();\r
+               if (results.isEmpty()){\r
+                       return null;\r
+               }else{\r
+                       if(results.size() > 1){\r
+                               logger.error("findByUuid() delivers more than one result for UUID: " + uuid);\r
+                       }\r
+                       return results.get(0);\r
+               }\r
+       } finally {\r
+               // set back the session flush mode \r
+               if(currentFlushMode != null) {\r
+                       session.setFlushMode(currentFlushMode);\r
+               }\r
+       }\r
+    }\r
 \r
     @Override\r
     public List<T> listByIds(Collection<Integer> ids,  Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws DataAccessException {\r
 \r
     @Override\r
     public List<T> listByIds(Collection<Integer> ids,  Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws DataAccessException {\r