最近、SpringDataJpaが発見されました。私がそれを機能させることができなかった1つのことは、Springの例外階層への適切な例外変換でした。
このSpringDataによると、JPAはCGLibプロキシを非リポジトリクラスに強制<jpa:repositories />
し、@Repositoryで注釈が付けられたSpringBeanの永続性例外変換をアクティブにします。この投稿のリファレンスドキュメントは、spring-data-jpa1.1.1を指しています。
ただし、バージョン1.3.0のドキュメントを見ると、この段落は削除されています。また@Repository
、可能な限り注釈を付けて重ねていましたが、成功しませんでした。
私の質問は、最近のspring-data-jpa libバージョン1.3.0で適切な例外変換を実現することは可能ですか?
Ok。ここにいくつかの構成を置きます:
..。
<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" />
mpersistence.xmlのコンテンツ
<?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>
私のリポジトリ
@Repository
public interface TestRepository extends JpaRepository<Setting, Long> {
Setting findByNamee(String name);
}
ここで、データベースの実際のプロパティはnameeではなくnameであるため、findByNameeはSpringデータベースの例外を発生させる必要があります。しかし、私はいつも得ます
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
@Repository
ただし、アノテーションを使用して通常のDaoオブジェクトを構成すると、すべてが期待どおりに機能します。
eclipseLink2.3.2を使用してTomcat6.0にデプロイしようとしています。