2

我正在使用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.persistencePersonDAOAddressDAO还有实体。

我有以下两个 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. 我认为EnversRevisionRepositoryFactoryBean两者都适用RevisionRepositoryJpaRepository

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

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“addressService”的bean时出错:通过字段“addressDAO”表示不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“addressDAO”的 bean 时出错:init 方法调用失败;嵌套异常是 org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type AddressEntity!

原因:org.springframework.beans.factory.BeanCreationException:创建名为“addressDAO”的bean时出错:调用init方法失败;嵌套异常是 org.springframework.data.mapping.PropertyReferenceException: No property findAll found for type AddressEntity!

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

我是否缺少任何配置。

4

1 回答 1

6

得到解决方案;)

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

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

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

@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean, basePackages = "com.example.envers.dao")
class EnversConfig {}
于 2017-11-09T12:59:26.797 回答