EnversRevisionRepositoryFactoryBean为JPARepositories创建bean

时间:2017-11-08 06:03:03

标签: spring-boot hibernate-envers spring-data-envers

我正在使用spring boot,hibernate enverse。我在pom.xml中有以下依赖

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-envers</artifactId>
</dependency>

以下是我的envers配置。

@Configuration
@EnableJpaRepositories(repositoryFactoryBeanClass = 
EnversRevisionRepositoryFactoryBean.class, basePackages = { 
"com.example.persistence" })
public class EnversConf
{

}

所以包com.example.persistence包含PersonDAOAddressDAO以及实体。

我有两个DAO,

interface PersonDAO  extends RevisionRepository<PersonEntity, Integer, Integer>, JpaRepository<PersonEntity, Integer>{}

interface AddressDAO  extends JpaRepository<AddressEntity, Integer>{}

我有两个实体PersonEntity我想审核,AddressEntity我不想审核。

现在我有以下两项服务,

class PersonServiceImpl implements PersonService{
    @Autowire PersonDAO personDAO;
}

class AddressServiceImpl implements AddressService{
    @Autowire AddressDAO addressDAO;
}

当我添加@EnableJpaRepositories(...)配置时,它无法获取AddressDAO的bean。我认为EnversRevisionRepositoryFactoryBean适用于RevisionRepositoryJpaRepository

我得到了以下异常堆栈跟踪,

  

org.springframework.beans.factory.UnsatisfiedDependencyException:使用名称&#39; addressService&#39;创建bean时出错:通过字段&quot; addressDAO&#39;表达的不满意的依赖关系嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名称为&#39; addressDAO&#39;的init时出错::init方法的调用失败;嵌套异常是org.springframework.data.mapping.PropertyReferenceException:找不到类型AddressEntity的属性findAll!

     

引起:org.springframework.beans.factory.BeanCreationException:创建名称为&#39; addressDAO&#39;的init时出错::init方法的调用失败;嵌套异常是org.springframework.data.mapping.PropertyReferenceException:找不到类型AddressEntity的属性findAll!

     

引起:org.springframework.data.mapping.PropertyReferenceException:找不到类型为AdressEntity的属性findAll!

我错过了任何配置。

1 个答案:

答案 0 :(得分:5)

得到解决方案;)

需要创建两个单独的配置类,因为我们不能在相同的配置类上使用TWO @EnableJpaRepositories。

所以创建了以下两个配置类,

@EnableJpaRepositories(basePackages = "com.example.jpa.dao")
class JpaConfig {}

@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean, basePackages = "com.example.envers.dao")
class EnversConfig {}