2017-02-24 67 views
0

這可能類似於其他幾個已經問過的問題,但我找不到確切的答案。我試圖建立在Spring JPASpring JPA通用基礎知識庫

基本接口的通用基礎類:

@NoRepositoryBean 
public interface GenericRepository <T, ID extends Serializable> 
{ 
    public T handleCustom(String id); 
} 

實現類:

@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; 
    } 
} 

特定領域的類:

public interface DomainRepository 
    extends JpaRepository<Domain, String>, 
    GenericRepository<Domain, String> 
{ 

} 

實體:

@Entity 
public class Domain extends ParentEntity 
{ 
    @Id 
    private String domainId; 
    private String domainName; 

    public Domain() 
    { 

    } 
    //setters getters 
    ..... 
} 

配置文件:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(basePackages = "com.rabbitmq.jpa") 
public class JPAConfig 
{ 
} 

以下錯誤:

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! 

我在做什麼錯在這裏。

+3

見http://docs.spring.io/spring-data/jpa/docs/1.7.2.RELEASE/reference/html/#repositories.custom-behaviour-for-all -repositories –

回答

0

我得到這個工作具有以下配置:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(basePackages = "com.rabbitmq.jpa",repositoryBaseClass = GenericRepositoryImpl.class) 
public class JPAConfig 
{ 
} 

基本接口:

@NoRepositoryBean 
public interface GenericRepository <T, ID extends Serializable> extends JpaRepository<T, ID> 
{ 
    public T handleCustom(String id); 
} 

實現類:

@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; 
     } 
    } 

特定領域類:

@Repository 
@Transactional(readOnly = true) 
public interface DomainRepository extends GenericRepository <Domain, String> 
{ 

}