When inserting an audited revision I get the following error:
{noformat}Hibernate: insert into audited_revision (id, timestamp) values (default, ?) 2022-07-21 15:46:09.496 TRACE 67111 --- [ XNIO-1 task-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [TIMESTAMP] - [Thu Jul 21 15:46:09 CEST 2022] Hibernate: call identity() 2022-07-21 15:46:09.504 WARN 67111 --- [ XNIO-1 task-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 90022, SQLState: 90022 2022-07-21 15:46:09.504 ERROR 67111 --- [ XNIO-1 task-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Function "IDENTITY" not found; SQL statement: call identity() [90022-214] 2022-07-21 15:46:09.518 ERROR 67111 --- [ XNIO-1 task-1] o.z.problem.spring.common.AdviceTraits : Internal Server Error
org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [call identity()]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement{noformat}
This error occurs with Hibernate Envers version 5.6.10 and H2 version 2.1.214. This blocks us from upgrading Spring Boot from 2.6 to 2.7. It seems to be related to [https://hibernate.atlassian.net/browse/HHH-14985|https://hibernate.atlassian.net/browse/HHH-14985|smart-link].
The table has successfully been created on startup of the integration test.
{noformat}Hibernate: create table audited_revision (id bigint generated by default as identity, timestamp timestamp, primary key (id)){noformat}
My application.yml has the following configuration:
{noformat}spring: jpa: defer-datasource-initialization: true database: H2 hibernate: ddl-auto: create-drop open-in-view: false properties: format_sql: true org: hibernate: envers: store_data_at_delete: true hibernate: temp: use_jdbc_metadata_defaults: false dialect: org.hibernate.dialect.H2Dialect show-sql: true{noformat}
It seems that the new H2 dialect from version 2.X isn’t fully supported by Hibernate.
Our AuditedRevision entity:
{noformat}@Entity @RevisionEntity data class AuditedRevision ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @RevisionNumber var id: Long? = null,
@RevisionTimestamp @Temporal(TemporalType.TIMESTAMP) var timestamp: Date
) : Serializable { companion object { private const val serialVersionUID = -4310160L } }{noformat} |
|