Сочетание JPA-аудитора Spring с версией JPA с Hibernate @Generated (GenerationTime.ALWAYS) приводит к некорректным запросам UPDATE - PullRequest
0 голосов
/ 05 февраля 2020

Для справки, это пример сущности:

@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 вместо «предыдущей версии», но только если для объекта включен аудит.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...