hibernate envers声明entitymanager已关闭

7kqas0il  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(227)

我有一个spring(boot)应用程序,我正在尝试使用hibernate enver。
以下 bar 函数抛出 IllegalStateException: EntityManager is closed ,而 foo 功能完美无瑕:

@Service
public class FoobarService {

    private final EntityManager entityManager;

    @Autowired
    public FoobarService(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public Iterable<Foobar> foo() {
        return entityManager.createQuery("select f from Foobar f", Foobar.class).getResultList();
    }

    public Iterable<Foobar> bar() {
        System.out.println(entityManager.isOpen()); // <--- Returns true!

        AuditReader auditReader = AuditReaderFactory.get(entityManager);
        AuditQueryCreator queryCreator = auditReader.createQuery();
        AuditQuery query = queryCreator.forRevisionsOfEntity(Foobar.class, true);

        return query.getResultList();
    }

}

有人知道为什么它说它关门了吗 foo 功能是否正常(如上所述)?
ps:为了简洁起见,我省略了maven依赖项和实体Map,因为它们都在工作。
编辑:
有件很奇怪的事我想不通。在 bar 函数,我们可以看到: entityManager.isOpen() 返回true ((Session) entityManager.getDelegate()).isOpen() 返回false
这个 AuditReaderFactory.get(EntityManager entityManager) 函数使用第二个,这就是为什么它抱怨会话关闭了而它没有关闭的原因。我不太明白为什么 delegate 已关闭,因此:
工厂为什么使用 entityManager 的代理?
为什么代理是关闭的?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题