Я настроил аудит через библиотеку hibernate-envers, и он работал нормально, пока я не захотел прочитать историю через API AuditReader.
Это код:
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);
}
Вышло исключениеis org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: 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=? )
Выбрано больше столбцов, но они сейчас не важны ... Используемые параметрыhibernate:
bindNamedParameters() TEST_NEW -> _p1 [3]
bindNamedParameters() DEL -> _p0 [2]
bindNamedParameters() 5 -> revision [1]
Я попытался выполнить запрос с этими параметрами, и он выдает то же исключение.Причина в том, что второй параметр queue_aud0_.REVTYPE <>? , потому что hibernate пытается установить там строку 'DEL', в то время как REVTYPE - smallint.Это странно, потому что таблицы были автоматически сгенерированы hibernate ... Любая идея, почему он это делает ??
Я использую версию 4.2.0.Final
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>4.2.0.Final</version>
</dependency>