Для справки, это пример сущности:
@Entity
@Table(name = "example")
@EntityListeners(AuditingEntityListener.class)
public class Example {
@Id
@Column(name = "rep_firm_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "created_time", nullable = false, updatable = false)
@CreatedDate
private OffsetDateTime createdTime;
@Column(name = "modified_time")
@LastModifiedDate
private OffsetDateTime modifiedTime;
@Column(name = "xmin")
@Version
@Generated(GenerationTime.ALWAYS)
private int version;
}
Если я закомментирую аннотацию @EntityListeners, тогда свойство version работает, как и ожидалось, то есть запросы UPDATE имеют следующее: UPDATE example SET foo = bla WHERE xmin = version
Если я закомментирую аннотацию @Version, то запросы UPDATE не имеют WHERE xmin = version, но в них есть пример UPDATE SET foo bla ,ified_time = time
Если я объединю 2, я получу ОЧЕНЬ странное поведение и не выясню причину:
Пример ОБНОВЛЕНИЯ SET foo bla, updated_time = time WHERE xmin = versionPlusOne
По сути, он использует «следующую версию» в предложении WHERE вместо «предыдущей версии», но только если для объекта включен аудит.
Есть идеи?