diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryExtImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryExtImpl.java index ff5eb437f..86b17eb8e 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryExtImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryExtImpl.java @@ -22,18 +22,13 @@ public class JpaOwnerRepositoryExtImpl extends JpaOwnerRepositoryImpl implements @SuppressWarnings("unchecked") @Override public Collection findAll() throws DataAccessException { - // TODO Select only owner or still join with pets ? - Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets"); + Query query = this.em.createQuery("SELECT owner FROM Owner owner"); return query.getResultList(); } @Override public void delete(Owner owner) throws DataAccessException { - // TODO need null check, throw Exception etc ? - if(!(owner.getId() == null)){ - this.em.remove(owner); - } - + this.em.remove(this.em.contains(owner) ? owner : this.em.merge(owner)); } } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryExtImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryExtImpl.java index 612deff10..8be2ffbab 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryExtImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryExtImpl.java @@ -33,7 +33,7 @@ public class JpaPetRepositoryExtImpl extends JpaPetRepositoryImpl implements Pet @Override public void delete(Pet pet) throws DataAccessException { - this.em.remove(pet); + this.em.remove(this.em.contains(pet) ? pet : this.em.merge(pet)); } } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetTypeRepositoryExtImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetTypeRepositoryExtImpl.java index 2ef5efd4e..74507b46a 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetTypeRepositoryExtImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetTypeRepositoryExtImpl.java @@ -41,8 +41,7 @@ public class JpaPetTypeRepositoryExtImpl implements PetTypeRepositoryExt { @Override public void delete(PetType petType) throws DataAccessException { - this.em.remove(petType); - + this.em.remove(this.em.contains(petType) ? petType : this.em.merge(petType)); } } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaSpecialtyRepositoryExtImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaSpecialtyRepositoryExtImpl.java index 3fe42de4f..9b0773bd8 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaSpecialtyRepositoryExtImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaSpecialtyRepositoryExtImpl.java @@ -40,7 +40,7 @@ public class JpaSpecialtyRepositoryExtImpl implements SpecialtyRepositoryExt { @Override public void delete(Specialty specialty) throws DataAccessException { - this.em.remove(specialty); + this.em.remove(this.em.contains(specialty) ? specialty : this.em.merge(specialty)); } } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVetRepositoryExtImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVetRepositoryExtImpl.java index 057a7a025..fc2f15fee 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVetRepositoryExtImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVetRepositoryExtImpl.java @@ -40,7 +40,7 @@ public class JpaVetRepositoryExtImpl extends JpaVetRepositoryImpl implements Vet @Override public void delete(Vet vet) throws DataAccessException { - this.em.remove(vet); + this.em.remove(this.em.contains(vet) ? vet : this.em.merge(vet)); } } diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryExtImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryExtImpl.java index 418c0f2ab..4a0f8e46a 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryExtImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryExtImpl.java @@ -32,8 +32,7 @@ public class JpaVisitRepositoryExtImpl extends JpaVisitRepositoryImpl implements @Override public void delete(Visit visit) throws DataAccessException { - // TODO Auto-generated method stub - this.em.remove(visit); + this.em.remove(this.em.contains(visit) ? visit : this.em.merge(visit)); } } diff --git a/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java index 897ec65c3..a19339589 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/OwnerRestController.java @@ -18,6 +18,7 @@ package org.springframework.samples.petclinic.rest; import java.util.Collection; +import javax.transaction.Transactional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; @@ -26,14 +27,12 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.samples.petclinic.model.Owner; -import org.springframework.samples.petclinic.model.Pet; import org.springframework.samples.petclinic.service.ClinicServiceExt; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.util.UriComponentsBuilder; @@ -49,8 +48,8 @@ public class OwnerRestController { @Autowired private ClinicServiceExt clinicService; - @RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) - public ResponseEntity> getOwnersList(@RequestParam("lastName") String ownerLastName){ + @RequestMapping(value = "/*/lastname/{lastName}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public ResponseEntity> getOwnersList(@PathVariable("lastName") String ownerLastName){ if (ownerLastName == null){ ownerLastName = ""; } @@ -61,6 +60,15 @@ public class OwnerRestController { return new ResponseEntity>(owners, HttpStatus.OK); } + @RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public ResponseEntity> getOwners(){ + Collection owners = this.clinicService.findAllOwners(); + if(owners.isEmpty()){ + return new ResponseEntity>(HttpStatus.NOT_FOUND); + } + return new ResponseEntity>(owners, HttpStatus.OK); + } + @RequestMapping(value = "/{ownerId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity getOwner(@PathVariable("ownerId") int ownerId){ Owner owner = this.clinicService.findOwnerById(ownerId); @@ -100,6 +108,7 @@ public class OwnerRestController { } @RequestMapping(value = "/{ownerId}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @Transactional public ResponseEntity deleteOwner(@PathVariable("ownerId") int ownerId){ Owner owner = this.clinicService.findOwnerById(ownerId); if(owner == null){ diff --git a/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java index ac42e0084..e2e55c3b4 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/PetRestController.java @@ -18,6 +18,7 @@ package org.springframework.samples.petclinic.rest; import java.util.Collection; +import javax.transaction.Transactional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; @@ -95,13 +96,13 @@ public class PetRestController { } @RequestMapping(value = "/{petId}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @Transactional public ResponseEntity deletePet(@PathVariable("petId") int petId){ Pet pet = this.clinicService.findPetById(petId); if(pet == null){ return new ResponseEntity(HttpStatus.NOT_FOUND); } this.clinicService.deletePet(pet); - // TODO delete error - FK etc. return new ResponseEntity(HttpStatus.NO_CONTENT); } diff --git a/src/main/java/org/springframework/samples/petclinic/rest/PetTypeRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/PetTypeRestController.java index 1ea408c1f..b7f1ada08 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/PetTypeRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/PetTypeRestController.java @@ -3,6 +3,7 @@ package org.springframework.samples.petclinic.rest; import java.util.ArrayList; import java.util.Collection; +import javax.transaction.Transactional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; @@ -73,6 +74,7 @@ public class PetTypeRestController { } @RequestMapping(value = "/{petTypeId}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @Transactional public ResponseEntity deletePetType(@PathVariable("petTypeId") int petTypeId){ PetType petType = this.clinicService.findPetTypeById(petTypeId); if(petType == null){ diff --git a/src/main/java/org/springframework/samples/petclinic/rest/SpecialtyRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/SpecialtyRestController.java index 72cb0c5a7..81ec29801 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/SpecialtyRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/SpecialtyRestController.java @@ -3,6 +3,7 @@ package org.springframework.samples.petclinic.rest; import java.util.ArrayList; import java.util.Collection; +import javax.transaction.Transactional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; @@ -73,6 +74,7 @@ public class SpecialtyRestController { } @RequestMapping(value = "/{specialtyId}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @Transactional public ResponseEntity deleteSpecialty(@PathVariable("specialtyId") int specialtyId){ Specialty specialty = this.clinicService.findSpecialtyById(specialtyId); if(specialty == null){ diff --git a/src/main/java/org/springframework/samples/petclinic/rest/VetRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/VetRestController.java index fa9cd554f..389f2d4e0 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/VetRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/VetRestController.java @@ -18,6 +18,7 @@ package org.springframework.samples.petclinic.rest; import java.util.ArrayList; import java.util.Collection; +import javax.transaction.Transactional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; @@ -94,6 +95,7 @@ public class VetRestController { } @RequestMapping(value = "/{vetId}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @Transactional public ResponseEntity deleteVet(@PathVariable("vetId") int vetId){ Vet vet = this.clinicService.findVetById(vetId); if(vet == null){ diff --git a/src/main/java/org/springframework/samples/petclinic/rest/VisitRestController.java b/src/main/java/org/springframework/samples/petclinic/rest/VisitRestController.java index d60fd4b2e..e9b317319 100644 --- a/src/main/java/org/springframework/samples/petclinic/rest/VisitRestController.java +++ b/src/main/java/org/springframework/samples/petclinic/rest/VisitRestController.java @@ -3,6 +3,7 @@ package org.springframework.samples.petclinic.rest; import java.util.ArrayList; import java.util.Collection; +import javax.transaction.Transactional; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; @@ -75,6 +76,7 @@ public class VisitRestController { } @RequestMapping(value = "/{visitId}", method = RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + @Transactional public ResponseEntity deleteVisit(@PathVariable("visitId") int visitId){ Visit visit = this.clinicService.findVisitById(visitId); if(visit == null){