Revision 183973c8
Added by Andreas Kohlbecker almost 8 years ago
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/ClassificationDaoHibernateImpl.java | ||
---|---|---|
175 | 175 |
return result; |
176 | 176 |
} |
177 | 177 |
|
178 |
@Override |
|
179 |
public List<TaxonNode> listSiblingsOf(Taxon taxon, Classification classification, Integer pageSize, Integer pageIndex, List<String> propertyPaths){ |
|
180 |
Query query = prepareListSiblingsOf(taxon, classification, false); |
|
181 |
|
|
182 |
setPagingParameter(query, pageSize, pageIndex); |
|
183 |
|
|
184 |
@SuppressWarnings("unchecked") |
|
185 |
List<TaxonNode> result = query.list(); |
|
186 |
//check if array is "empty" (not containing null objects) |
|
187 |
if(!result.isEmpty() && result.iterator().next()==null){ |
|
188 |
return java.util.Collections.emptyList(); |
|
189 |
} |
|
190 |
defaultBeanInitializer.initializeAll(result, propertyPaths); |
|
191 |
return result; |
|
192 |
} |
|
193 |
|
|
178 | 194 |
|
179 | 195 |
|
180 | 196 |
@Override |
... | ... | |
184 | 200 |
return count; |
185 | 201 |
} |
186 | 202 |
|
203 |
@Override |
|
204 |
public Long countSiblingsOf(Taxon taxon, Classification classification){ |
|
205 |
Query query = prepareListSiblingsOf(taxon, classification, true); |
|
206 |
Long count = (Long) query.uniqueResult(); |
|
207 |
return count; |
|
208 |
} |
|
209 |
|
|
187 | 210 |
private Query prepareListChildrenOf(Taxon taxon, Classification classification, boolean doCount){ |
188 | 211 |
|
189 | 212 |
String selectWhat = doCount ? "count(cn)" : "cn"; |
190 | 213 |
|
191 |
String hql = "select " + selectWhat + " from TaxonNode as tn left join tn.classification as c left join tn.taxon as t left join tn.childNodes as cn "
|
|
214 |
String hql = "select " + selectWhat + " from TaxonNode as tn JOIN tn.classification as c JOIN tn.taxon as t JOIN tn.childNodes as cn "
|
|
192 | 215 |
+ "where t = :taxon and c = :classification"; |
193 | 216 |
Query query = getSession().createQuery(hql); |
194 | 217 |
query.setParameter("taxon", taxon); |
... | ... | |
196 | 219 |
return query; |
197 | 220 |
} |
198 | 221 |
|
222 |
private Query prepareListSiblingsOf(Taxon taxon, Classification classification, boolean doCount){ |
|
223 |
|
|
224 |
String selectWhat = doCount ? "count(tn)" : "tn"; |
|
225 |
|
|
226 |
String subSelect = "SELECT tn.parent FROM TaxonNode as tn JOIN tn.classification as c JOIN tn.taxon as t " |
|
227 |
+ "WHERE t = :taxon AND c = :classification"; |
|
228 |
String hql = "SELECT " + selectWhat + " FROM TaxonNode as tn WHERE tn.parent IN ( " + subSelect + ")"; |
|
229 |
Query query = getSession().createQuery(hql); |
|
230 |
query.setParameter("taxon", taxon); |
|
231 |
query.setParameter("classification", classification); |
|
232 |
return query; |
|
233 |
} |
|
234 |
|
|
199 | 235 |
|
200 | 236 |
@Override |
201 | 237 |
public UUID delete(Classification persistentObject){ |
Also available in: Unified diff
#5852 dao, service and controler for taxonNode sibling retrieval