From 993257f5a8ca5060b01660ef39611732e3a72082 Mon Sep 17 00:00:00 2001
From: Mic <misvy@vmware.com>
Date: Thu, 18 Apr 2013 10:10:16 +0800
Subject: [PATCH] We're now able to use Spring Data there

see: https://jira.springsource.org/browse/DATAJPA-292
---
 .../springdatajpa/JpaOwnerRepositoryImpl.java | 70 -------------------
 .../SpringDataOwnerRepository.java            | 41 +++++++++++
 src/main/resources/logback.xml                |  1 +
 src/main/resources/spring/business-config.xml |  4 --
 src/test/resources/logback-test.xml           | 23 ------
 5 files changed, 42 insertions(+), 97 deletions(-)
 delete mode 100644 src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/JpaOwnerRepositoryImpl.java
 create mode 100644 src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/SpringDataOwnerRepository.java
 delete mode 100644 src/test/resources/logback-test.xml

diff --git a/src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/JpaOwnerRepositoryImpl.java b/src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/JpaOwnerRepositoryImpl.java
deleted file mode 100644
index 5dc55e8..0000000
--- a/src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/JpaOwnerRepositoryImpl.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2002-2013 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.samples.petclinic.repository.springdatajpa;
-
-import java.util.Collection;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
-
-import org.springframework.samples.petclinic.model.Owner;
-import org.springframework.samples.petclinic.repository.OwnerRepository;
-import org.springframework.stereotype.Repository;
-
-/**
- * Using native JPA instead of Spring Data JPA here because of this query: "SELECT owner FROM Owner owner left join
- * fetch owner.pets WHERE owner.lastName LIKE :lastName" See https://jira.springsource.org/browse/DATAJPA-292 for more
- * details.
- * This issue has been fixed already in the latest Spring Data JPA Snapshot. So we will wait for the next version of Spring 
- * Data JPA to be available and update the Spring Petclinic application consequently.
- *
- * @author Michael Isvy
- */
-@Repository
-public class JpaOwnerRepositoryImpl implements OwnerRepository {
-
-    @PersistenceContext
-    private EntityManager em;
-
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public Collection<Owner> findByLastName(String lastName) {
-        // using 'join fetch' because a single query should load both owners and pets
-        // using 'left join fetch' because it might happen that an owner does not have pets yet
-        Query query = this.em.createQuery("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.lastName LIKE :lastName");
-        query.setParameter("lastName", lastName + "%");
-        return query.getResultList();
-    }
-
-    @Override
-    public Owner findById(int id) {
-        // using 'join fetch' because a single query should load both owners and pets
-        // using 'left join fetch' because it might happen that an owner does not have pets yet
-        Query query = this.em.createQuery("SELECT owner FROM Owner owner left join fetch owner.pets WHERE owner.id =:id");
-        query.setParameter("id", id);
-        return (Owner) query.getSingleResult();
-    }
-
-
-    @Override
-    public void save(Owner owner) {
-        this.em.merge(owner);
-
-    }
-
-}
diff --git a/src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/SpringDataOwnerRepository.java b/src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/SpringDataOwnerRepository.java
new file mode 100644
index 0000000..ca1f709
--- /dev/null
+++ b/src/main/java/org/springframework/samples/petclinic/repository/springdatajpa/SpringDataOwnerRepository.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2002-2013 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.samples.petclinic.repository.springdatajpa;
+
+import java.util.Collection;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.Repository;
+import org.springframework.data.repository.query.Param;
+import org.springframework.samples.petclinic.model.Owner;
+import org.springframework.samples.petclinic.repository.OwnerRepository;
+
+/**
+ * Spring Data JPA specialization of the {@link OwnerRepository} interface
+ *
+ * @author Michael Isvy
+ * @since 15.1.2013
+ */
+public interface SpringDataOwnerRepository extends OwnerRepository, Repository<Owner, Integer> {
+		
+		@Override
+	    @Query("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.lastName LIKE :lastName%")
+	    public Collection<Owner> findByLastName(@Param("lastName") String lastName);
+		
+		@Override
+		@Query("SELECT owner FROM Owner owner left join fetch owner.pets WHERE owner.id =:id")
+	    public Owner findById(@Param("id") int id);
+}
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index c847fee..751726a 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -14,6 +14,7 @@
         </encoder>
     </appender>
 
+	<!--<logger name="org.hibernate" level="debug"/> -->
     <logger name="org.springframework.samples.petclinic" level="debug"/>
          
     <root level="info">
diff --git a/src/main/resources/spring/business-config.xml b/src/main/resources/spring/business-config.xml
index c392dc3..731bd1c 100644
--- a/src/main/resources/spring/business-config.xml
+++ b/src/main/resources/spring/business-config.xml
@@ -80,9 +80,5 @@
 
     <beans profile="spring-data-jpa">
         <jpa:repositories base-package="org.springframework.samples.petclinic.repository.springdatajpa"/>
-
-        <!-- Custom configuration for the custom implementation based on JPA -->
-        <bean id="ownerRepository"
-              class="org.springframework.samples.petclinic.repository.springdatajpa.JpaOwnerRepositoryImpl"/>
     </beans>
 </beans>
\ No newline at end of file
diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml
deleted file mode 100644
index 5a3eb20..0000000
--- a/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration debug="true">
-
-    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
-        <resetJUL>true</resetJUL>
-    </contextListener>
-
-    <!-- To enable JMX Management -->
-    <jmxConfigurator/>
-
-    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>%-5level %logger{0} - %msg%n</pattern>
-        </encoder>
-    </appender>
-
-    <logger name="org.springframework.samples.petclinic" level="debug"/>
-    <logger name="org.springframework.test.web" level="trace"/>
-
-    <root level="warn">
-        <appender-ref ref="console"/>
-    </root>
-</configuration>
-- 
GitLab