Project

General

Profile

« Previous | Next » 

Revision edfed701

Added by Patrick Plitzner almost 6 years ago

ref #7095 Implement quicker service for taxon associated specimens

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java
47 47
import eu.etaxonomy.cdm.model.taxon.Synonym;
48 48
import eu.etaxonomy.cdm.model.taxon.Taxon;
49 49
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
50
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
50 51
import eu.etaxonomy.cdm.model.view.AuditEvent;
51 52
import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionDao;
52 53
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;
......
54 55
import eu.etaxonomy.cdm.persistence.dao.name.IHomotypicalGroupDao;
55 56
import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;
56 57
import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;
58
import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
57 59
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
58 60
import eu.etaxonomy.cdm.persistence.query.MatchMode;
59 61
import eu.etaxonomy.cdm.persistence.query.OrderHint;
......
590 592
    }
591 593

  
592 594

  
595
    @Override
596
    public List<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids,
597
            Integer limit, Integer start, List<OrderHint> orderHints){
598

  
599
        String queryString = "SELECT "
600
                + "de.associatedSpecimenOrObservation.uuid, "
601
                + "de.associatedSpecimenOrObservation.id, "
602
                + "de.associatedSpecimenOrObservation.titleCache, "
603
                + "tn "
604
                + " FROM DescriptionElementBase AS de" +
605
                " LEFT JOIN de.inDescription AS d" +
606
                " LEFT JOIN d.taxon AS t" +
607
                " JOIN t.taxonNodes AS tn" +
608
                " WHERE d.class = 'TaxonDescription' "
609
                + "AND tn.uuid in (:taxonNodeUuids) "
610
                ;
611

  
612
        Query query = getSession().createQuery(queryString);
613

  
614
        query.setParameterList("taxonNodeUuids", taxonNodeUuids);
615

  
616
        if(limit != null) {
617
            if(start != null) {
618
                query.setFirstResult(start);
619
            } else {
620
                query.setFirstResult(0);
621
            }
622
            query.setMaxResults(limit);
623
        }
624

  
625
        List<SpecimenNodeWrapper> list = new ArrayList<>();
626
        List<Object[]> result = query.list();
627
        for(Object[] object : result){
628
            list.add(new SpecimenNodeWrapper(
629
                    new UuidAndTitleCache<SpecimenOrObservationBase>(
630
                            (UUID) object[0],
631
                            (Integer) object[1],
632
                            (String) object[2]),
633
                    (TaxonNode)object[3]));
634
        }
635
        return list;
636
    }
637

  
593 638
    @Override
594 639
    public <T extends SpecimenOrObservationBase> List<UuidAndTitleCache<SpecimenOrObservationBase>> listUuidAndTitleCacheByAssociatedTaxon(Class<T> clazz, Taxon associatedTaxon,
595 640
            Integer limit, Integer start, List<OrderHint> orderHints){

Also available in: Unified diff