From ef36406f26b42a5544da7ee20370b860a2ed7300 Mon Sep 17 00:00:00 2001 From: zouchine Date: Mon, 12 Feb 2018 15:49:12 +0100 Subject: [PATCH] TRUNK-5332: HibernateProviderDAO.getCountOfProviders handles more than one match. --- .../db/hibernate/HibernateProviderDAO.java | 20 ++++++++++--------- .../org/openmrs/api/ProviderServiceTest.java | 4 +--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/api/src/main/java/org/openmrs/api/db/hibernate/HibernateProviderDAO.java b/api/src/main/java/org/openmrs/api/db/hibernate/HibernateProviderDAO.java index e0e57fa731b1..d8af5e58010b 100644 --- a/api/src/main/java/org/openmrs/api/db/hibernate/HibernateProviderDAO.java +++ b/api/src/main/java/org/openmrs/api/db/hibernate/HibernateProviderDAO.java @@ -14,7 +14,7 @@ import java.util.Map; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; @@ -25,6 +25,7 @@ import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; +import org.hibernate.sql.JoinType; import org.openmrs.Person; import org.openmrs.Provider; import org.openmrs.ProviderAttribute; @@ -63,6 +64,7 @@ private Session getSession() { /** * @see org.openmrs.api.db.ProviderDAO#saveProvider(org.openmrs.Provider) */ + @Override public Provider saveProvider(Provider provider) { getSession().saveOrUpdate(provider); return provider; @@ -81,7 +83,7 @@ public void deleteProvider(Provider provider) { */ @Override public Provider getProvider(Integer id) { - return (Provider) getSession().load(Provider.class, id); + return (Provider) getSession().get(Provider.class, id); } /** @@ -116,7 +118,7 @@ public Collection getProvidersByPerson(Person person, boolean includeR */ @Override public ProviderAttribute getProviderAttribute(Integer providerAttributeID) { - return (ProviderAttribute) getSession().load(ProviderAttribute.class, providerAttributeID); + return (ProviderAttribute) getSession().get(ProviderAttribute.class, providerAttributeID); } /** @@ -184,14 +186,15 @@ private Criteria prepareProviderCriteria(String name, boolean includeRetired) { } Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Provider.class).createAlias("person", "p", - Criteria.LEFT_JOIN); + JoinType.LEFT_OUTER_JOIN); + if (!includeRetired) { criteria.add(Restrictions.eq("retired", false)); } criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); - criteria.createAlias("p.names", "personName", Criteria.LEFT_JOIN); + criteria.createAlias("p.names", "personName", JoinType.LEFT_OUTER_JOIN); Disjunction or = Restrictions.disjunction(); or.add(Restrictions.ilike("identifier", name, getMatchMode())); @@ -238,9 +241,8 @@ private Junction getNameSearchExpression(String name) { */ @Override public Long getCountOfProviders(String name, boolean includeRetired) { - Criteria criteria = prepareProviderCriteria(name, includeRetired); - criteria.setProjection(Projections.countDistinct("providerId")); - return (Long) criteria.uniqueResult(); + Criteria criteria = prepareProviderCriteria(name, includeRetired); + return (long) criteria.list().size(); } /* (non-Javadoc) @@ -274,7 +276,7 @@ private T getByUuid(String uuid, Class clazz) { */ @Override public ProviderAttributeType getProviderAttributeType(Integer providerAttributeTypeId) { - return (ProviderAttributeType) getSession().load(ProviderAttributeType.class, providerAttributeTypeId); + return (ProviderAttributeType) getSession().get(ProviderAttributeType.class, providerAttributeTypeId); } /* (non-Javadoc) diff --git a/api/src/test/java/org/openmrs/api/ProviderServiceTest.java b/api/src/test/java/org/openmrs/api/ProviderServiceTest.java index 30f795844466..62da88bf8355 100644 --- a/api/src/test/java/org/openmrs/api/ProviderServiceTest.java +++ b/api/src/test/java/org/openmrs/api/ProviderServiceTest.java @@ -520,7 +520,6 @@ public void getCountOfProviders_shouldFetchNumberOfProviderMatchingGivenQuery() * @see ProviderService#getCountOfProviders(String) */ @Test - @Ignore @Verifies(value = "should exclude retired providers", method = "getCountOfProviders(String)") public void getCountOfProviders_shouldExcludeRetiredProviders() throws Exception { assertEquals(2, service.getCountOfProviders("provider").intValue()); @@ -530,10 +529,9 @@ public void getCountOfProviders_shouldExcludeRetiredProviders() throws Exception * @see ProviderService#getCountOfProviders(String,null) */ @Test - @Ignore @Verifies(value = "should include retired providers if includeRetired is set to true", method = "getCountOfProviders(String,null)") public void getCountOfProviders_shouldIncludeRetiredProvidersIfIncludeRetiredIsSetToTrue() throws Exception { - assertEquals(4, service.getCountOfProviders("provider").intValue()); + assertEquals(4, service.getCountOfProviders("provider", true).intValue()); } /**