10

spring boot と spring data jpa を使用しています。私も休止状態の envers を使用しており、AuditReaderFactory にアクセスして、監査クエリを作成できるようにする必要があります。

スプリング ブートとスプリング データ jpa であるため、すべてが自動構成されます。だから私がこれをするとき、

@Autowired
AuditReaderFactory auditReaderFactory;

うまくいきません。次のエラーが表示されます。

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.envers.AuditReaderFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency

リポジトリ クラスで AuditReaderFactory への適切な参照を取得するにはどうすればよいですか?

4

4 に答える 4

0

私の意見では、@deniss-s の回答 (トップ投票の回答) は正しくありません。なぜなら、EntityManager はトランザクションのコンテキスト外で再利用してはならないからです ( https://stackoverflow.com/a/9375891/554117を参照)。ソリューションはそれをシングルトンとして利用します。

AuditReader の正しい取得は次のようになります。

public class AuditRepository {

    @PersistenceContext
    private EntityManager entityManager;

    private AuditReader getAuditReader() {
        return AuditReaderFactory.get(entityManager);
    }
 
     public Optional<T> getRevision() {
         final AuditReader auditReader = getAuditReader();
         ...
    }

}

于 2021-12-01T00:30:05.763 に答える