Revision 7426d467
Added by Patrick Plitzner almost 6 years ago
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java | ||
---|---|---|
591 | 591 |
return results; |
592 | 592 |
} |
593 | 593 |
|
594 |
|
|
595 |
@Override |
|
596 |
public List<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids, |
|
597 |
Integer limit, Integer start, List<OrderHint> orderHints){ |
|
598 |
|
|
599 |
String queryString = "SELECT " |
|
594 |
private List<SpecimenNodeWrapper> queryIndividualAssociatedSpecimen(List<UUID> taxonNodeUuids, |
|
595 |
Integer limit, Integer start, List<OrderHint> orderHintss){ |
|
596 |
String queryString = "SELECT " |
|
600 | 597 |
+ "de.associatedSpecimenOrObservation.uuid, " |
601 | 598 |
+ "de.associatedSpecimenOrObservation.id, " |
602 | 599 |
+ "de.associatedSpecimenOrObservation.titleCache, " |
603 | 600 |
+ "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' "
|
|
601 |
+ "FROM DescriptionElementBase AS de "
|
|
602 |
+ "LEFT JOIN de.inDescription AS d "
|
|
603 |
+ "LEFT JOIN d.taxon AS t "
|
|
604 |
+ "JOIN t.taxonNodes AS tn "
|
|
605 |
+ "WHERE d.class = 'TaxonDescription' "
|
|
609 | 606 |
+ "AND tn.uuid in (:taxonNodeUuids) " |
610 | 607 |
; |
608 |
Query query = getSession().createQuery(queryString); |
|
609 |
|
|
610 |
query.setParameterList("taxonNodeUuids", taxonNodeUuids); |
|
611 |
|
|
612 |
if(limit != null) { |
|
613 |
if(start != null) { |
|
614 |
query.setFirstResult(start); |
|
615 |
} else { |
|
616 |
query.setFirstResult(0); |
|
617 |
} |
|
618 |
query.setMaxResults(limit); |
|
619 |
} |
|
620 |
|
|
621 |
List<SpecimenNodeWrapper> list = new ArrayList<>(); |
|
622 |
List<Object[]> result = query.list(); |
|
623 |
for(Object[] object : result){ |
|
624 |
list.add(new SpecimenNodeWrapper( |
|
625 |
new UuidAndTitleCache<SpecimenOrObservationBase>( |
|
626 |
(UUID) object[0], |
|
627 |
(Integer) object[1], |
|
628 |
(String) object[2]), |
|
629 |
(TaxonNode)object[3])); |
|
630 |
} |
|
631 |
return list; |
|
632 |
} |
|
633 |
|
|
634 |
private List<SpecimenNodeWrapper> queryTypeSpecimen(List<UUID> taxonNodeUuids, |
|
635 |
Integer limit, Integer start, List<OrderHint> orderHints){ |
|
636 |
String queryString = "SELECT " |
|
637 |
+ "td.typeSpecimen.uuid, " |
|
638 |
+ "td.typeSpecimen.id, " |
|
639 |
+ "td.typeSpecimen.titleCache, " |
|
640 |
+ "tn " |
|
641 |
+ "FROM SpecimenTypeDesignation AS td " |
|
642 |
+ "LEFT JOIN td.typifiedNames AS tn " |
|
643 |
+ "LEFT JOIN tn.taxonBases AS t " |
|
644 |
+ "JOIN t.taxonNodes AS tn " |
|
645 |
+ "WHERE tn.uuid in (:taxonNodeUuids) " |
|
646 |
; |
|
647 |
Query query = getSession().createQuery(queryString); |
|
648 |
|
|
649 |
query.setParameterList("taxonNodeUuids", taxonNodeUuids); |
|
650 |
|
|
651 |
if(limit != null) { |
|
652 |
if(start != null) { |
|
653 |
query.setFirstResult(start); |
|
654 |
} else { |
|
655 |
query.setFirstResult(0); |
|
656 |
} |
|
657 |
query.setMaxResults(limit); |
|
658 |
} |
|
659 |
|
|
660 |
List<SpecimenNodeWrapper> list = new ArrayList<>(); |
|
661 |
List<Object[]> result = query.list(); |
|
662 |
for(Object[] object : result){ |
|
663 |
list.add(new SpecimenNodeWrapper( |
|
664 |
new UuidAndTitleCache<SpecimenOrObservationBase>( |
|
665 |
(UUID) object[0], |
|
666 |
(Integer) object[1], |
|
667 |
(String) object[2]), |
|
668 |
(TaxonNode)object[3])); |
|
669 |
} |
|
670 |
return list; |
|
671 |
} |
|
672 |
|
|
673 |
private List<SpecimenNodeWrapper> queryTaxonDeterminations(List<UUID> taxonNodeUuids, |
|
674 |
Integer limit, Integer start, List<OrderHint> orderHints){ |
|
675 |
String queryString = "SELECT " |
|
676 |
+ "det.identifiedUnit.uuid, " |
|
677 |
+ "det.identifiedUnit.id, " |
|
678 |
+ "det.identifiedUnit.titleCache, " |
|
679 |
+ "tn " |
|
680 |
+ "FROM DeterminationEvent AS det " |
|
681 |
+ "LEFT JOIN det.taxon AS t " |
|
682 |
+ "JOIN t.taxonNodes AS tn " |
|
683 |
+ "WHERE tn.uuid in (:taxonNodeUuids) " |
|
684 |
; |
|
685 |
Query query = getSession().createQuery(queryString); |
|
686 |
|
|
687 |
query.setParameterList("taxonNodeUuids", taxonNodeUuids); |
|
688 |
|
|
689 |
if(limit != null) { |
|
690 |
if(start != null) { |
|
691 |
query.setFirstResult(start); |
|
692 |
} else { |
|
693 |
query.setFirstResult(0); |
|
694 |
} |
|
695 |
query.setMaxResults(limit); |
|
696 |
} |
|
611 | 697 |
|
698 |
List<SpecimenNodeWrapper> list = new ArrayList<>(); |
|
699 |
List<Object[]> result = query.list(); |
|
700 |
for(Object[] object : result){ |
|
701 |
list.add(new SpecimenNodeWrapper( |
|
702 |
new UuidAndTitleCache<SpecimenOrObservationBase>( |
|
703 |
(UUID) object[0], |
|
704 |
(Integer) object[1], |
|
705 |
(String) object[2]), |
|
706 |
(TaxonNode)object[3])); |
|
707 |
} |
|
708 |
return list; |
|
709 |
} |
|
710 |
|
|
711 |
private List<SpecimenNodeWrapper> queryTaxonNameDeterminations(List<UUID> taxonNodeUuids, |
|
712 |
Integer limit, Integer start, List<OrderHint> orderHints){ |
|
713 |
String queryString = "SELECT " |
|
714 |
+ "det.identifiedUnit.uuid, " |
|
715 |
+ "det.identifiedUnit.id, " |
|
716 |
+ "det.identifiedUnit.titleCache, " |
|
717 |
+ "tn " |
|
718 |
+ "FROM DeterminationEvent AS det " |
|
719 |
+ "LEFT JOIN det.taxonName AS n " |
|
720 |
+ "LEFT JOIN n.taxonBases AS t " |
|
721 |
+ "JOIN t.taxonNodes AS tn " |
|
722 |
+ "WHERE tn.uuid in (:taxonNodeUuids) " |
|
723 |
; |
|
612 | 724 |
Query query = getSession().createQuery(queryString); |
613 | 725 |
|
614 | 726 |
query.setParameterList("taxonNodeUuids", taxonNodeUuids); |
... | ... | |
635 | 747 |
return list; |
636 | 748 |
} |
637 | 749 |
|
750 |
@Override |
|
751 |
public List<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids, |
|
752 |
Integer limit, Integer start, List<OrderHint> orderHints){ |
|
753 |
|
|
754 |
List<SpecimenNodeWrapper> list = new ArrayList<>(); |
|
755 |
list.addAll(queryIndividualAssociatedSpecimen(taxonNodeUuids, limit, start, orderHints)); |
|
756 |
list.addAll(queryTaxonDeterminations(taxonNodeUuids, limit, start, orderHints)); |
|
757 |
list.addAll(queryTaxonNameDeterminations(taxonNodeUuids, limit, start, orderHints)); |
|
758 |
list.addAll(queryTypeSpecimen(taxonNodeUuids, limit, start, orderHints)); |
|
759 |
|
|
760 |
return list; |
|
761 |
} |
|
762 |
|
|
638 | 763 |
@Override |
639 | 764 |
public <T extends SpecimenOrObservationBase> List<UuidAndTitleCache<SpecimenOrObservationBase>> listUuidAndTitleCacheByAssociatedTaxon(Class<T> clazz, Taxon associatedTaxon, |
640 | 765 |
Integer limit, Integer start, List<OrderHint> orderHints){ |
Also available in: Unified diff
ref #7095 Enhance quicker service for taxon associated specimens