only log lazy initialisation exception while remove null from collection
authorKatja Luther <k.luther@bgbm.org>
Wed, 18 Aug 2021 10:46:55 +0000 (12:46 +0200)
committerKatja Luther <k.luther@bgbm.org>
Wed, 18 Aug 2021 10:46:55 +0000 (12:46 +0200)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/term/DefinedTermDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/hibernate/PostMergeEntityListener.java

index f1eac65ae00947bb248a65e0624409e3f5502a18..08318b240daf35bfde55f25cfe82e239d7a1b6f6 100644 (file)
@@ -644,27 +644,6 @@ public class DefinedTermDaoImpl
     @Override
     public <S extends DefinedTermBase> List<S> list(Class<S> clazz, List<TermVocabulary> vocs, Integer pageNumber, Integer limit, String pattern, MatchMode matchmode){
         Session session = getSession();
-//        Query query = null;
-//        if (pattern != null){
-//            if (vocs != null && !vocs.isEmpty()){
-//                query = session.createQuery("from NamedArea where titleCache like :pattern and vocabulary in :vocs ORDER BY titleCache");
-//                query.setParameterList("vocs", vocs);
-//            }else{
-//                query = session.createQuery("from NamedArea where titleCache like :pattern ORDER BY titleCache");
-//            }
-//            pattern = pattern.replace("*", "%");
-//            pattern = pattern.replace("?", "_");
-//            pattern = pattern + "%";
-//            query.setParameter("pattern", pattern);
-//
-//        } else {
-//            query = session.createQuery("FROM NamedArea WHERE vocabulary IN :vocs ORDER BY titleCache");
-//            query.setParameterList("vocs", vocs);
-//        }
-//        if (limit != null && limit > 0){
-//           query.setMaxResults(limit);
-//        }
-
         if (clazz == null){
             clazz = (Class)type;
         }
@@ -700,8 +679,6 @@ public class DefinedTermDaoImpl
         if (limit == null){
             limit = 1;
         }
-//        int firstItem = (pageNumber - 1) * limit;
-
         crit.setFirstResult(0);
         @SuppressWarnings("unchecked")
         List<S> results = deduplicateResult(crit.list());
@@ -753,31 +730,6 @@ public class DefinedTermDaoImpl
         return results;
     }
 
-    //FIXME AM: this returns only NamedArea counts though not mentioned in method name, fortunately it is currently not in use
-    @Override
-    public long count(List<TermVocabulary> vocs, String pattern){
-        Session session = getSession();
-        Query query = null;
-        if (pattern != null){
-            if (vocs != null && !vocs.isEmpty()){
-                query = session.createQuery("SELECT COUNT(*) FROM NamedArea WHERE titleCache LIKE :pattern AND vocabulary IN :vocs");
-                query.setParameterList("vocs", vocs);
-            }else{
-                query = session.createQuery("SELECT COUNT(*) FROM NamedArea WHERE titleCache LIKE :pattern ");
-            }
-            pattern = pattern.replace("*", "%");
-            pattern = pattern.replace("?", "_");
-            pattern = pattern + "%";
-            query.setParameter("pattern", pattern);
-
-        } else {
-            query = session.createQuery("SELECT COUNT(*) FROM NamedArea WHERE vocabulary IN :vocs");
-            query.setParameterList("vocs", vocs);
-        }
-
-        Long result = (Long) query.uniqueResult();
-        return result;
-    }
 
     @Override
     public Collection<TermDto> getIncludesAsDto(
index 15c4405bca9eb987ca4dee2e4c7af5e3d64dcf27..f458aa84e52910b59586e041fa7fa6be5dec8914 100644 (file)
@@ -13,8 +13,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.log4j.Logger;
 import org.hibernate.Hibernate;
 import org.hibernate.HibernateException;
+import org.hibernate.LazyInitializationException;
 import org.hibernate.Session;
 import org.hibernate.event.spi.MergeEvent;
 import org.hibernate.event.spi.MergeEventListener;
@@ -34,7 +36,7 @@ public class PostMergeEntityListener implements MergeEventListener {
     private static final long serialVersionUID = 1565797119368313987L;
 
     private static Map<Session, Set<CdmBase>> newEntitiesMap = new ConcurrentHashMap<>();
-
+    private static final Logger logger = Logger.getLogger(PostMergeEntityListener.class);
 
     public static void addSession(Session session) {
         newEntitiesMap.put(session, new HashSet<>());
@@ -101,13 +103,17 @@ public class PostMergeEntityListener implements MergeEventListener {
 
                 TermTree<?> tree = (TermTree<?>)entity;
                 tree.removeNullValueFromChildren();
-                for (TermNode<?> node:tree.getRootChildren()){
-                    node.removeNullValueFromChildren();
-                    if (node.getChildNodes() != null){
-                        for (TermNode<?> childNode: node.getChildNodes()){
-                            removeNullFromCollections(childNode);
+                try{
+                    for (TermNode<?> node:tree.getRootChildren()){
+                        node.removeNullValueFromChildren();
+                        if (node.getChildNodes() != null){
+                            for (TermNode<?> childNode: node.getChildNodes()){
+                                removeNullFromCollections(childNode);
+                            }
                         }
                     }
+                } catch (LazyInitializationException e) {
+                    logger.warn("Cannot clean up uninitialized children without a session, skipping.");
                 }
             } else if (TermNode.class.isAssignableFrom(entityClazz)){
                 TermNode<?> node = (TermNode<?>)entity;