fix #8287 implementing support for null type status as filter value in Registration...
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / dao / hibernate / name / RegistrationDaoHibernateImpl.java
index 179696020b623e76cec620504619ac747a501522..c191eade47167232500943b2c38c0d1026ed6fd7 100644 (file)
@@ -259,8 +259,20 @@ public class RegistrationDaoHibernateImpl
             parameters.put("referenceFilterPattern", MatchMode.ANYWHERE.queryStringFrom(referenceFilterPattern));
         }
         if(doTypeStatusFilter){
-            where += " AND typeStatus.uuid in (:typeDesignationStatusUuids)";
-            parameters.put("typeDesignationStatusUuids", typeDesignationStatusUuids);
+            boolean addNullFilter = false;
+            while(typeDesignationStatusUuids.contains(null)){
+                addNullFilter = true;
+                typeDesignationStatusUuids.remove(null);
+            }
+            String typeStatusWhere = "";
+            if(!typeDesignationStatusUuids.isEmpty()){
+                typeStatusWhere += " typeStatus.uuid in (:typeDesignationStatusUuids)";
+                parameters.put("typeDesignationStatusUuids", typeDesignationStatusUuids);
+            }
+            if(addNullFilter){
+                typeStatusWhere += (!typeStatusWhere.isEmpty() ? " OR ":"") + "typeStatus is null";
+            }
+            where += " AND ( " +  typeStatusWhere + ")";
         }
         String hql = select + from + where + orderBy;
         Query query = getSession().createQuery(hql);