Java 关于“的几个问题”;向所有存储库添加自定义行为”;春季数据jpa

Java 关于“的几个问题”;向所有存储库添加自定义行为”;春季数据jpa,java,repository,spring-data,spring-data-jpa,Java,Repository,Spring Data,Spring Data Jpa,我使用Spring data jpa,并尝试向所有存储库添加自定义行为,如下所述: 我遇到了几个问题: -首先,在RepositoryMetadata类中没有Spring文档中描述的getDomainClass这样的方法(见下文): 受保护对象GetTargetPository(RepositoryMetadata){ 返回新的MyRepositoryImpl((Class)metadata.getDomainClass(),entityManager); } 我改用了以下方法:getDom

我使用Spring data jpa,并尝试向所有存储库添加自定义行为,如下所述:

我遇到了几个问题:

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

受保护对象GetTargetPository(RepositoryMetadata){
返回新的MyRepositoryImpl((Class)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>()
org.springframework.beans.factory.BeanCreationException:创建名为“globalRepositoryImpl”的bean时出错,该名称在文件[E:\users\jumartin\dev_sts\.metadata\.plugins\org.eclipse.wst.server.core]中定义\
tmp0\wtpwebapps\SuiviTRC\WEB-INF\classes\trc\suivi\repository\GlobalRepositoryImpl.class]:bean实例化失败;嵌套的异常为org.springframework.beans.BeanInstantiationException:可能
未实例化bean类[trc.suivi.repository.GlobalRepositoryImpl]:未找到默认构造函数;嵌套异常是java.lang.NoSuchMethodException:trc.suivi.repository.GlobalRepositoryImpl。()
以下是我的自定义全局存储库代码:

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) {

    }

}
公共类GlobalRepositoryImpl扩展了SimpleParepository实现了GlobalRepository{
私人实体管理者;
public GlobalRepositoryImpl(类domainClass,EntityManager em){
超级(域名类,em);
this.em=em;
}
公共无效sharedCustomMethod(ID){
}
}
以下是我的xml配置:

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


我在网上找不到其他的样品。有人能帮忙吗

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


这里有更多信息:

我已经给出了一个完整的示例,说明了如何将自定义行为添加到所有存储库中。

您可以将不同JPA实现(例如hibernate、openJPA)的特性添加到基本存储库中。我已经做了另一个教程。

从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) {

    }
}
public interface SomeRepository extends GlobalRepository<User, Long> {}
公共类GlobalRepositoryImpl扩展了SimpleParepository实现了GlobalRepository{
public GlobalRepositoryImpl(JpaEntityInformation entityInformation,EntityManager EntityManager){
超级(实体信息、实体管理器);
}
@凌驾
公共无效sharedCustomMethod(ID){
}
}
3) 某些存储库:

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) {

    }
}
public interface SomeRepository extends GlobalRepository<User, Long> {}
公共接口SomeRepository扩展了GlobalRepository{} 当然,
GlobalRepository
仍然需要用
@NoRepositoryBean