spring-boothibernate-enversspring-data-envers

EnversRevisionRepositoryFactoryBean dosenot create bean for JPARepositories


I am using spring boot, hibernate enverse. I have following dependency in pom.xml

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

following is my envers config.

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

}

So package com.example.persistence have PersonDAO and AddressDAO and also Entities.

I have following two DAOs,

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

interface AddressDAO  extends JpaRepository<AddressEntity, Integer>{}

I have two entities PersonEntity which I want to audit and AddressEntity which I don't want to audit.

Now I have following two services,

class PersonServiceImpl implements PersonService{
    @Autowire PersonDAO personDAO;
}

class AddressServiceImpl implements AddressService{
    @Autowire AddressDAO addressDAO;
}

When I add @EnableJpaRepositories(...) config it unable to get beans for AddressDAO. I thought EnversRevisionRepositoryFactoryBean works for both RevisionRepository and JpaRepository.

I got following exception stacktrace,

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'addressService': Unsatisfied dependency expressed through field 'addressDAO'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'addressDAO': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type AddressEntity!

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'addressDAO': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type AddressEntity!

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type AdressEntity!

Am I missing any configuration.


Solution

  • Got solution ;)

    Need to create two separate configuration classes as we cannot use TWO @EnableJpaRepositories on same configuration class.

    So have created following two configuration classes,

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