В проект трехлетней давности не получилось прикрутить Hibernate Envers, возникала ошибка при запуске приложения:
Caused by: org.hibernate.MappingException: The increment size of the [hibernate_sequence] sequence is set to [1] in the entity mapping while the associated database sequence increment size is [50].
На том проекте Envers не сильно нужен был, поэтому обошлись без него.
На новом проекте все-таки возникла острая необходимость в использовании Envers, пришлось потратить время, чтобы решить данную проблему.
В нашем проект используется не hibernate_sequence, а sequence_generator, но принцип тот же.
Проблема в том, что в базе данных у sequence шаг приращения 50 (в целях производительности), а в коде у какой-то сущности с данным sequence приращение равно 1. Эта сущность - revinfo.
Нужно переопределить RevInfo, добавив следующую сущность в ваш проект:
@Entity @Table(name = "revinfo") @RevisionEntity public class CustomRevisionEntity { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") @SequenceGenerator(name = "sequenceGenerator") @RevisionNumber private long rev; @RevisionTimestamp private long timestamp; public long getRev() { return rev; } public void setRev(long rev) { this.rev = rev; } public long getTimestamp() { return timestamp; } public void setTimestamp(long timestamp) { this.timestamp = timestamp; } } |
Ключевое изменение - это строки:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") @SequenceGenerator(name = "sequenceGenerator") |
Которые явно задают sequence, который будет использовать таблица revinfo. В нашем случае - это sequence_generator.
Если помогло, отпишитесь в комментах. 🙂
p.s. Дефолтная revinfo какая-то косячная.
Идентификатор ревизии почему-то integer, а не long.
Также не читабельна ревизия в виде long timestamp, но есть две альтернативы. Либо только дата, либо только время. Что еще неудобнее, а хотелось бы человекочитаемую дату со временем.
Совет: лучше переопределить revinfo, даже если у вас нет проблем с последовательностями.
Добавить комментарий