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