From 5bf31dbe5a8858430b3b0a3ef9c640e236950c49 Mon Sep 17 00:00:00 2001
From: Mic <misvy@vmware.com>
Date: Thu, 9 May 2013 01:09:21 +0800
Subject: [PATCH] fixed JPA issue when updating existing owners/pets

---
 .../petclinic/repository/jpa/JpaOwnerRepositoryImpl.java   | 7 ++++++-
 .../petclinic/repository/jpa/JpaPetRepositoryImpl.java     | 7 ++++++-
 .../petclinic/repository/jpa/JpaVisitRepositoryImpl.java   | 7 ++++++-
 .../petclinic/service/AbstractClinicServiceTests.java      | 2 +-
 4 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java
index fd0f217..c7398df 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaOwnerRepositoryImpl.java
@@ -70,7 +70,12 @@ public class JpaOwnerRepositoryImpl implements OwnerRepository {
 
     @Override
     public void save(Owner owner) {
-        this.em.persist(owner);
+    	if (owner.getId() == null) {
+    		this.em.persist(owner);     		
+    	}
+    	else {
+    		this.em.merge(owner);    
+    	}
 
     }
 
diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java
index 4823aab..84d564d 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaPetRepositoryImpl.java
@@ -53,7 +53,12 @@ public class JpaPetRepositoryImpl implements PetRepository {
 
     @Override
     public void save(Pet pet) {
-        this.em.persist(pet);
+    	if (pet.getId() == null) {
+    		this.em.persist(pet);     		
+    	}
+    	else {
+    		this.em.merge(pet);    
+    	}
     }
 
 }
diff --git a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java
index fccf795..3415def 100644
--- a/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java
+++ b/src/main/java/org/springframework/samples/petclinic/repository/jpa/JpaVisitRepositoryImpl.java
@@ -45,7 +45,12 @@ public class JpaVisitRepositoryImpl implements VisitRepository {
 
     @Override
     public void save(Visit visit) {
-        this.em.persist(visit);
+    	if (visit.getId() == null) {
+    		this.em.persist(visit);     		
+    	}
+    	else {
+    		this.em.merge(visit);    
+    	}
     }
 
 
diff --git a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java b/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
index e3c5f0a..02a21ac 100644
--- a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
+++ b/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java
@@ -89,8 +89,8 @@ public abstract class AbstractClinicServiceTests {
         owner.setCity("Wollongong");
         owner.setTelephone("4444444444");
         this.clinicService.saveOwner(owner);
+        Assert.assertNotEquals("Owner Id should have been generated", owner.getId().longValue(), 0);
         owners = this.clinicService.findOwnerByLastName("Schultz");
-        assertNotNull("Owner Id should have been generated", owner.getId());
         assertEquals("Verifying number of owners after inserting a new one.", found + 1, owners.size());
     }
 
-- 
GitLab