手动设置Spring Data JPA存储库,具有自定义实现

时间:2014-05-13 13:32:28

标签: java spring jpa spring-data spring-data-jpa

我正在尝试手动定义自定义spring数据存储库,我有以下3个类:

public interface PersonRepository extends JpaRepository<Person, Long>...

public interface PersonRepositoryCustom 

public class PersonRepositoryImpl implements PersonRepositoryCustom {
  @Resource
private PersonRepository personRepository;
......
}

要在Configuration类中配置它,我有以下内容:

@Bean
public PersonRepositoryImpl personRepositoryImpl() {
return new PersonRepositoryImpl();
}

@Bean
public PersonRepository personRepository() {
    return getFactoryBean(PersonRepository.class, personRepositoryImpl());
}

private <T> T getFactoryBean(Class<T> repository, Object customImplementation) {
    BaseRepositoryFactoryBean factory = new BaseRepositoryFactoryBean();
    factory.setEntityManager(entityManager);
    factory.setBeanFactory(beanFactory);
    factory.setRepositoryInterface(repository);
    if (customImplementation != null) {
        factory.setCustomImplementation(customImplementation);
    }
    factory.afterPropertiesSet();
    return (T) factory.getObject();

}

我遇到的问题是我得到了 “创建名为'personRepository'的bean时出错:正在创建请求的bean:是否存在无法解析的循环引用”

这似乎是因为PersonRepositoryImpl包含对personRepository接口的资源引用。

如果我在配置类上使用EnableJpaRepositories,那么一切似乎都能正常工作。 但是我不想使用那个注释,它会根据包进行扫描,而且我想要更细粒度的可配置性。

那么有谁知道如何手动设置一个弹簧自定义存储库,它允许注入而没有循环引用问题?

任何?

1 个答案:

答案 0 :(得分:1)

您可以创建一个CustomRepository扩展Repository<T,ID extends Serializable>的界面。如果您想完全控制您的存储库,那么您可以自己实现CustomRepositoryImpl。您可以参考SimpleJpaRepository作为实施示例。