这可能与已经被问到的其他几个问题类似,但我无法找到我得到的错误的确切答案。我正在尝试在Spring 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!我到底做错了什么。
发布于 2017-07-15 17:00:15
我用下面的配置实现了这个功能:
@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>
{
}发布于 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
https://stackoverflow.com/questions/42448097
复制相似问题