1

IN my springbootapp I have the following repository:-

@Repository
public class RevisionRepository {

private AuditReader auditReader;

public RevisionRepository(AuditReader auditReader) {
    this.auditReader = auditReader;
  }
}

When I run this app. I got this error:-

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2020-12-24 21:09:15 -


APPLICATION FAILED TO START


Description:

Parameter 0 of constructor in com.howtodoinjava.demo.repository.RevisionRepository required a bean of type 'org.hibernate.envers.AuditReader' that could not be found.

Action:

Consider defining a bean of type 'org.hibernate.envers.AuditReader' in your configuration.

How can I make this work?

masiboo
  • 4,537
  • 9
  • 75
  • 136

2 Answers2

2

Accepted answer didn't work for me because, after some time the application is running, it starts throwing java.net.SocketException due to connection closed.

I solved the issue by:

  1. Wiring EntityManager using @PersistenceContext

  2. Getting a new instance of AuditReader each time

    public class AuditRepository {
    
    @PersistenceContext
    private EntityManager entityManager;
    
    private AuditReader getAuditReader() {
        return AuditReaderFactory.get(entityManager);
    }
    
    public Optional<T> getRevision() {
        final AuditReader auditReader = getAuditReader();
        ...
    }
    
Giulio Pulina
  • 344
  • 4
  • 15
0

This fixed my issue. Hopefully, it will be helpful for others:-

@Configuration
public class RevisionConfiguration {

@Autowired
private AuditReader auditReader;

private final EntityManagerFactory entityManagerFactory;

public RevisionConfiguration(EntityManagerFactory entityManagerFactory) {
    this.entityManagerFactory = entityManagerFactory;
}

@Bean
AuditReader auditReader() {
    return AuditReaderFactory.get(entityManagerFactory.createEntityManager());
  }
}
masiboo
  • 4,537
  • 9
  • 75
  • 136