diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java index c91a94c93..d233ace3e 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerController.java @@ -93,7 +93,7 @@ class OwnerController { } // find owners by last name - Page ownersResults = findPaginatedForOwnersLastName(page, owner.getLastName()); + Page ownersResults = findPaginatedForOwnersName(page, owner.getLastName()); if (ownersResults.isEmpty()) { // no owners found result.rejectValue("lastName", "notFound", "not found"); @@ -120,6 +120,12 @@ class OwnerController { return "owners/ownersList"; } + private Page findPaginatedForOwnersName(int page, String name) { + int pageSize = 5; + Pageable pageable = PageRequest.of(page - 1, pageSize); + return owners.findByName(name, pageable); + } + private Page findPaginatedForOwnersLastName(int page, String lastname) { int pageSize = 5; Pageable pageable = PageRequest.of(page - 1, pageSize); diff --git a/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java b/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java index 062df4576..8ea2fd4ed 100644 --- a/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java +++ b/src/main/java/org/springframework/samples/petclinic/owner/OwnerRepository.java @@ -45,6 +45,10 @@ public interface OwnerRepository extends Repository { @Transactional(readOnly = true) List findPetTypes(); + @Query("SELECT DISTINCT owner FROM Owner owner left join owner.pets WHERE owner.firstName LIKE :name% OR owner.lastName LIKE :name%") + @Transactional(readOnly = true) + Page findByName(@Param("name") String name, Pageable pageable); + /** * Retrieve {@link Owner}s from the data store by last name, returning all owners * whose last name starts with the given name. diff --git a/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java b/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java index 5478de154..4f7233c2a 100644 --- a/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java +++ b/src/test/java/org/springframework/samples/petclinic/owner/OwnerControllerTests.java @@ -139,14 +139,14 @@ class OwnerControllerTests { @Test void testProcessFindFormSuccess() throws Exception { Page tasks = new PageImpl(Lists.newArrayList(george(), new Owner())); - Mockito.when(this.owners.findByLastName(anyString(), any(Pageable.class))).thenReturn(tasks); + Mockito.when(this.owners.findByName(anyString(), any(Pageable.class))).thenReturn(tasks); mockMvc.perform(get("/owners?page=1")).andExpect(status().isOk()).andExpect(view().name("owners/ownersList")); } @Test void testProcessFindFormByLastName() throws Exception { Page tasks = new PageImpl(Lists.newArrayList(george())); - Mockito.when(this.owners.findByLastName(eq("Franklin"), any(Pageable.class))).thenReturn(tasks); + Mockito.when(this.owners.findByName(eq("Franklin"), any(Pageable.class))).thenReturn(tasks); mockMvc.perform(get("/owners?page=1").param("lastName", "Franklin")) .andExpect(status().is3xxRedirection()) .andExpect(view().name("redirect:/owners/" + TEST_OWNER_ID)); @@ -155,7 +155,7 @@ class OwnerControllerTests { @Test void testProcessFindFormNoOwnersFound() throws Exception { Page tasks = new PageImpl(Lists.newArrayList()); - Mockito.when(this.owners.findByLastName(eq("Unknown Surname"), any(Pageable.class))).thenReturn(tasks); + Mockito.when(this.owners.findByName(eq("Unknown Surname"), any(Pageable.class))).thenReturn(tasks); mockMvc.perform(get("/owners?page=1").param("lastName", "Unknown Surname")) .andExpect(status().isOk()) .andExpect(model().attributeHasFieldErrors("owner", "lastName"))