首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring JPA通用基础存储库

Spring JPA通用基础存储库
EN

Stack Overflow用户
提问于 2017-02-25 04:54:31
回答 2查看 3.3K关注 0票数 0

这可能与已经被问到的其他几个问题类似,但我无法找到我得到的错误的确切答案。我正在尝试在Spring JPA中构建泛型基类

基接口:

代码语言:javascript
复制
@NoRepositoryBean
public interface GenericRepository <T, ID extends Serializable>
{
    public T handleCustom(String id);
}

实现类:

代码语言:javascript
复制
@SuppressWarnings("serial")
public class GenericRepositoryImpl<T, ID extends Serializable>
 implements GenericRepository<T, ID>
{
    @PersistenceContext
    private EntityManager entityManager;

    Class type;

    public T handleCustom(String id)
    {
        Annotation[] ann = type.getAnnotations();

        return null;
    }
}

特定于域的类:

代码语言:javascript
复制
public interface DomainRepository 
   extends JpaRepository<Domain, String>,
   GenericRepository<Domain, String>
{

}

实体:

代码语言:javascript
复制
@Entity
public class Domain extends ParentEntity
{
    @Id
    private String domainId;
    private String domainName;

    public Domain()
    {

    }
    //setters getters
   .....
}

配置文件:

代码语言:javascript
复制
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.rabbitmq.jpa" )
public class JPAConfig
{
}

以下错误:

代码语言:javascript
复制
org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'domainRepository': 
       Invocation of init method failed; 
       nested exception is org.springframework.data.mapping.PropertyReferenceException: 
    No property handleCustom found for type Domain!

我到底做错了什么。

EN

回答 2

Stack Overflow用户

发布于 2017-07-15 17:00:15

我用下面的配置实现了这个功能:

代码语言:javascript
复制
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.rabbitmq.jpa",repositoryBaseClass = GenericRepositoryImpl.class )
public class JPAConfig
{
}

基接口:

代码语言:javascript
复制
@NoRepositoryBean
public interface GenericRepository <T, ID extends Serializable> extends JpaRepository<T, ID>
{
    public T handleCustom(String id);
}

实现类:

代码语言:javascript
复制
    @NoRepositoryBean
    public class GenericRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements GenericRepository<T, ID>
    {
        protected final EntityManager entityManager;

        public GenericRepositoryImpl(JpaEntityInformation<T, ?> entityInformation, EntityManager entityManager) {
            super(entityInformation, entityManager);
            this.entityManager = entityManager;
        }

        Class type;

        public T handleCustom(String id)
        {
            Annotation[] ann = type.getAnnotations();

            return null;
        }
    }

特定于域的类:

代码语言:javascript
复制
@Repository
@Transactional(readOnly = true)
public interface DomainRepository extends GenericRepository <Domain, String>
{

}
票数 2
EN

Stack Overflow用户

发布于 2017-02-25 14:42:57

您的自定义存储库功能的实现必须是Spring数据接口的名称+ "Impl“,而不是ypur接口的名称+ "Impl”。因此,在您的示例中,实现类必须是DomainRepositoryImpl而不是GenericRepositoryImpl。

请参阅spring文档以供参考。

http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/#repositories.custom-implementations

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42448097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档