【问题标题】:Several issues with "adding custom behaviour to all repositories" in spring data jpaspring data jpa中“向所有存储库添加自定义行为”的几个问题
【发布时间】:2012-07-18 13:23:32
【问题描述】:

我使用 Spring data jpa,我正在尝试向所有存储库添加自定义行为,如下所述: http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/#repositories.custom-behaviour-for-all-repositories

我遇到了几个问题:

-首先,RepositoryMetadata类中没有getDomainClass这样的方法,如Spring文档中所述(见下文):

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

我改用了以下方法:getDomainType()是这样吗?

-其次我的应用程序在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>

我无法在网上找到任何其他示例。有人可以帮忙吗?

【问题讨论】:

    标签: java repository spring-data spring-data-jpa


    【解决方案1】:

    我已经做了一个完整的例子来说明如何向所有存储库添加自定义行为。 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

    【讨论】:

      【解决方案2】:

      我终于得到了一些帮助,并且能够通过在中间接口上使用 @NoRepositoryBean 注释来让我的存储库工作。

      更多信息可在此处获得:http://forum.springsource.org/showthread.php?128536-Several-issues-with-quot-adding-custom-behaviour-to-all-repositories-quot-in-spring-data-jpa

      【讨论】:

        【解决方案3】:

        从 Spring Data JPA 1.9.M1 开始,向 Spring Data 管理的所有存储库添加自定义方法变得更加容易。 This 示例包含所有详细信息。

        在您的情况下,示例如下所示:

        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

        【讨论】:

          猜你喜欢
          • 2012-05-18
          • 2018-10-06
          • 1970-01-01
          • 2021-04-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-03
          • 2015-03-15
          • 1970-01-01
          相关资源
          最近更新 更多