2013-02-22 5 views
1

최근 스프링 데이터 Jpa가 발견되었습니다. 내가 작동하게 만들 수 없었던 것은 Spring의 예외 계층 구조에 대한 적절한 예외 변환이었다.스프링 데이터 -jpa 및 예외 처리

에 따르면 <jpa:repositories />은 @Repository로 주석 처리 된 스프링 빈에 대한 지속성 예외 변환을 활성화합니다. 이 게시물의 참조 문서는 spring-data-jpa 1.1.1을 가리 킵니다.

그러나 버전 1.3.0의 문서를 보면이 단락이 제거되었습니다. 또한 나는 가능한 한 어디서나 넣을 수 있지만 아무런 성공도하지 않고 @Repository 주석을 달고 있었다.

내 질문은 : 최근의 spring-data-jpa lib 버전 1.3.0을 사용하여 적절한 예외 번역을 달성 할 수 있습니까?

확인.

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="prjPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
     <description>Persistence unit which uses EclipseLink JPA 2.0 implementation.</description> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>com.mycompany.Setting</class> 
     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
     <properties> 
      <property name="eclipselink.target-server" value="JBoss"/> 
      <property name="eclipselink.target-database" value="Oracle10g"/> 
      <property name="eclipselink.weaving" value="static"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

내 rpository 여기

@Repository 
public interface TestRepository extends JpaRepository<Setting, Long> { 

    Setting findByNamee(String name); 
} 

이 findByNamee 일부 봄 데이터베이스 예외 상승한다

... mpersistence.xml의

<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="oracle.jdbc.OracleDriver"/> 
    <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:pbase"/> 
    <property name="user" value="sa"/> 
    <property name="password" value="pass"/> 
</bean> 

<context:annotation-config/> 

<bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="myDataSource"/> 
    <property name="persistenceUnitName" value="prjPersistenceUnit"></property> 
    <property name="persistenceXmlLocation" value="classpath:META-INF/mpersistence.xml"></property> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter" 
       p:showSql="true"/> 
    </property> 
</bean> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="myEmf"/> 
</bean> 

<tx:annotation-driven/> 

<jpa:repositories base-package="com.mycompany.repository" /> 

내용 : 나는 여기에 몇 가지 설정을 넣어 것입니다 databese에있는 부동산은 이름이 아닙니다. @Repository 주석 모든 것을 일반 다오 객체를 구성 할 때 예상대로하지만 항상

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException 

비록를 얻을 작동합니다.

eclipseLink 2.3.2를 사용하여 Tomcat 6.0에 배치하려고합니다. 예외 번역기는 방언에 있기 때문에

+0

많은 도움이되지는 않지만 확실히 가능합니다. 내 프로젝트에서 버전 1.3.0을 사용하고 예외 번역이 내 저장소에서 작동한다고 주장하는 테스트가 있습니다. ''이면 충분합니다. 'JpaRepositoryConfigExtension'은'@ Repository'로 주석 처리 된 bean을 찾는 bean post processor ('PersistenceExceptionTranslationPostProcessor')를 등록합니다. – zagyi

+0

아무도 내가 놓친 부분을 지적 할 수 있습니까? – user1278890

답변

0

당신은의 EntityManagerFactory로는 EclipseLink JPA 방언을 주입 할시 이후 게시 된 일부 작업 예제 코드를 확인할 수 있습니다.