3

私はSpring data jpaを使用しており、ここで説明されているように、すべてのリポジトリにカスタム動作を追加しようとしています: http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/#repositories.custom -すべてのリポジトリの動作

私はいくつかの問題に遭遇しました:

-まず、Spring のドキュメントに記載されているように、RepositoryMetadataクラスにgetDomainClassのようなメソッドはありません(以下を参照)。

protected Object getTargetRepository(RepositoryMetadata metadata) {
      return new MyRepositoryImpl<T, I>((Class<T>) metadata.getDomainClass(), entityManager);
}

代わりに次のメソッドを使用しました: getDomainType()これでよろしいですか?

-2番目に、Tomcat の起動時にアプリケーションが例外をスローします。完全なスタック トレースは次のとおりです。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'globalRepositoryImpl' defined in file [E:\users\jumartin\dev_sts\.metadata\.plugins\org.eclipse.wst.server.core\
tmp0\wtpwebapps\SuiviTRC\WEB-INF\classes\trc\suivi\repository\GlobalRepositoryImpl.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could
 not instantiate bean class [trc.suivi.repository.GlobalRepositoryImpl]: No default constructor found; nested exception is java.lang.NoSuchMethodException: trc.suivi.repository.GlobalRepositoryImpl.<i
nit>()

これが私のカスタム グローバル リポジトリ コードです。

public class GlobalRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements GlobalRepository<T, ID> {

    private EntityManager em;

    public GlobalRepositoryImpl(Class<T> domainClass, EntityManager em) {
        super(domainClass, em);
        this.em = em;
    }

    public void sharedCustomMethod(ID id) {

    }

}

ここに私のxml設定があります:

<repositories base-package="trc.suivi.repository" factory-class="trc.suivi.repository.GlobalRepositoryFactoryBean">
        <repository id="pliRepository" />
        <repository id="globalRepository" />
    </repositories>

ウェブ上で他のサンプルを見つけることができませんでした。誰でも助けてもらえますか?

4

3 に答える 3

2

カスタム動作をすべてのリポジトリに追加する方法の完全な例を作成しました。 http://borislam.blogspot.hk/2012/07/customizing-spring-data-jpa-repository.html

さまざまな JPA 実装 (hibernate、openJPA など) の機能をベース リポジトリに追加できます。私はそれについて別のチュートリアルを作成しました。 http://borislam.blogspot.hk/2012/07/adding-hibernate-native-sql-features.html

于 2012-07-21T05:46:57.220 に答える
1

私はついに助けを得て、中間インターフェースで@NoRepositoryBeanアノテーションを使用することでリポジトリを機能させることができました。

詳細については、こちらをご覧ください: http: //forum.springsource.org/showthread.php?128536-Several-issues-with-quot-adding-custom-behaviour-to-all-repositories-quot-in-spring-data- jpa

于 2012-07-20T13:11:48.503 に答える
1

Spring Data JPA 1.9.M1 の時点で、Spring Data が管理するすべてのリポジトリにカスタム メソッドを簡単に追加できるようになりました。この例にはすべての詳細が含まれています。

あなたの場合、例は次のようになります。

1) 構成

@Configuration
@EnableAutoConfiguration
@EnableJpaRepositories(repositoryBaseClass = GlobalRepositoryImpl.class)
class CustomRepositoryConfig {}

2) カスタム ベース リポジトリ:

public class GlobalRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements GlobalRepository<ID> {

    public GlobalRepositoryImpl(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {
        super(entityInformation, entityManager);
    }

    @Override
    public void sharedCustomMethod(ID id) {

    }
}

3) いくつかのリポジトリ:

public interface SomeRepository extends GlobalRepository<User, Long> {}

もちろんGlobalRepository、まだ注釈を付ける必要があります@NoRepositoryBean

于 2015-06-03T07:05:22.133 に答える