Hibernate 审计历史 reader 异常

Hibernate audit history reader exception

我通过 hibernate-envers 库配置了审计并且它工作正常,直到我想通过 AuditReader API.

读取历史记录

这是代码:

AuditReader auditReader = AuditReaderFactory.get(entityManager);
List<Number> revisionNumbers = auditReader.getRevisions(Queue.class, queue.getId());
        for (Number rev : revisionNumbers) {
            Queue auditedQueue = auditReader.find(Queue.class, queue.getId(), rev);
            audQueues.add(auditedQueue);
        }

抛出的异常是org.postgresql.util.PSQLException: ERROR: operator does not exist: smallint <> bytea 提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。 位置:879

我配置了 sql 日志记录,我看到失败的查询:

select queue_aud0_.ID as ID12_, queue_aud0_.REV as REV12_, queue_aud0_.REVTYPE as REVTYPE12_ from CMSMS_QUEUE_AUD queue_aud0_ where (queue_aud0_.REV=(select max(queue_aud1_.REV) from CMSMS_QUEUE_AUD queue_aud1_ where (queue_aud1_.REV<=? )and(queue_aud0_.ID=queue_aud1_.ID )))and(queue_aud0_.REVTYPE<>? )and(queue_aud0_.ID=? )

选择了更多的列,但它们现在并不重要...休眠使用的参数是:

bindNamedParameters() TEST_NEW -> _p1 [3]
bindNamedParameters() DEL -> _p0 [2]
bindNamedParameters() 5 -> revision [1]

我尝试了 运行 使用这些参数的查询,它抛出了同样的异常。原因是第二个参数 queue_aud0_.REVTYPE<>?,因为 hibernate 试图在那里设置 'DEL' 字符串,而 REVTYPE 是 smallint。这很奇怪,因为表格是由休眠自动生成的...知道为什么要这样做吗??

我用的是4.2版本0.Final

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-envers</artifactId>
    <version>4.2.0.Final</version>
</dependency>

在尝试了一些依赖性之后,它现在可以工作了。我将 Hibernate 切换到 5.3.0.Final 并将 SpringFramework 切换到 5.0.5.RELEASE。还删除了一些多余的 JPA 依赖项。不能确切地说,是什么解决了这个问题,因为我不得不一起更改这些所有依赖项,甚至 运行 应用程序。