Java 关于“的几个问题”;向所有存储库添加自定义行为”;春季数据jpa
我使用Spring data jpa,并尝试向所有存储库添加自定义行为,如下所述: 我遇到了几个问题: -首先,在RepositoryMetadata类中没有Spring文档中描述的getDomainClass这样的方法(见下文):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
受保护对象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