为什么不能在存储库中自动装配 AuditReader
Why AuditReader can't be Autowired in the Repository
在我的 springbootapp 中,我有以下存储库:-
@Repository
public class RevisionRepository {
private AuditReader auditReader;
public RevisionRepository(AuditReader auditReader) {
this.auditReader = auditReader;
}
}
当我 运行 这个应用程序。我收到这个错误:-
启动 ApplicationContext 时出错。要显示条件报告,请重新 运行 您的应用程序并启用 'debug'。
2020-12-24 21:09:15 -
应用程序启动失败
描述:
com.howtodoinjava.demo.repository.RevisionRepository 中构造函数的参数 0 需要找不到类型 'org.hibernate.envers.AuditReader' 的 bean。
操作:
考虑在您的配置中定义类型为 'org.hibernate.envers.AuditReader' 的 bean。
我怎样才能使这个工作?
这解决了我的问题。希望对其他人有所帮助:-
@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());
}
}
接受的答案对我不起作用,因为一段时间后应用程序 运行,由于连接关闭,它开始抛出 java.net.SocketException。
我通过以下方式解决了这个问题:
使用@PersistenceContext 连接 EntityManager
每次获取一个新的 AuditReader 实例
public class AuditRepository {
@PersistenceContext
private EntityManager entityManager;
private AuditReader getAuditReader() {
return AuditReaderFactory.get(entityManager);
}
public Optional<T> getRevision() {
final AuditReader auditReader = getAuditReader();
...
}
在我的 springbootapp 中,我有以下存储库:-
@Repository
public class RevisionRepository {
private AuditReader auditReader;
public RevisionRepository(AuditReader auditReader) {
this.auditReader = auditReader;
}
}
当我 运行 这个应用程序。我收到这个错误:-
启动 ApplicationContext 时出错。要显示条件报告,请重新 运行 您的应用程序并启用 'debug'。 2020-12-24 21:09:15 -
应用程序启动失败
描述:
com.howtodoinjava.demo.repository.RevisionRepository 中构造函数的参数 0 需要找不到类型 'org.hibernate.envers.AuditReader' 的 bean。
操作:
考虑在您的配置中定义类型为 'org.hibernate.envers.AuditReader' 的 bean。
我怎样才能使这个工作?
这解决了我的问题。希望对其他人有所帮助:-
@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());
}
}
接受的答案对我不起作用,因为一段时间后应用程序 运行,由于连接关闭,它开始抛出 java.net.SocketException。
我通过以下方式解决了这个问题:
使用@PersistenceContext 连接 EntityManager
每次获取一个新的 AuditReader 实例
public class AuditRepository { @PersistenceContext private EntityManager entityManager; private AuditReader getAuditReader() { return AuditReaderFactory.get(entityManager); } public Optional<T> getRevision() { final AuditReader auditReader = getAuditReader(); ... }