Javers - findChanges не записывает/выбирает вложенные VOJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Javers - findChanges не записывает/выбирает вложенные VO

Сообщение Anonymous »

У меня есть следующий код (java/jpa):

Код: Выделить всё

@NoArgsConstructor
@AllArgsConstructor
@ToString(onlyExplicitlyIncluded = true)
@Builder(toBuilder = true)
@Getter
@Setter
@Entity
public class Foo {
@ToString.Include
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@ToString.Include
@Valid
@NotNull
@AttributeOverride(
name = "origin.elementType",
column = @Column(name = "inclusion_origin_element_type", nullable = false)
)
@AttributeOverride(name = "origin.values", column = @Column(name = "inclusion_origin_value", length = 64))
@AttributeOverride(name = "destination.elementType", column = @Column(name = "inclusion_destination_element_type"))
@AttributeOverride(name = "destination.values", column = @Column(name = "inclusion_destination_value", length = 64))
@AttributeOverride(name = "bothDirections", column = @Column(name = "inclusion_both_direction", nullable = false))
@Embedded
private CompositionDetails inclusions;

@ToString.Include
@Valid
@Nullable
@AttributeOverride(name = "origin.elementType", column = @Column(name = "exclusion_origin_element_type"))
@AttributeOverride(name = "origin.values", column = @Column(name = "exclusion_origin_value", length = 64))
@AttributeOverride(name = "destination.elementType", column = @Column(name = "exclusion_destination_element_type"))
@AttributeOverride(name = "destination.values", column = @Column(name = "exclusion_destination_value", length = 64))
@AttributeOverride(name = "bothDirections", column = @Column(name = "exclusion_both_direction"))
@Embedded
private CompositionDetails exclusions;

//......
}
и

Код: Выделить всё

@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@Embeddable
public class CompositionDetails {

@Valid
@NotNull
@Embedded
private CompositionElement origin;

@Valid
@Nullable
@Embedded
private CompositionElement destination;

@Builder.Default
@Nullable
private Boolean bothDirections = Boolean.FALSE;
}
и:

Код: Выделить всё

@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@Setter
@Embeddable
public class CompositionElement {

@NotNull
@Column(nullable = false, length = 16)
@Enumerated(EnumType.STRING)
private ElementType elementType;

@Builder.Default
@NotEmpty
@ElementCollection(fetch = FetchType.EAGER)
private List values = new ArrayList();
}
Если я сохраняю исходный Foo без исключений, а затем обновляю этот объект некоторым значением исключения, происходит следующее:
  • Код: Выделить всё

    javers.findChanges(QueryBuilder.byInstanceId(id, clazz).withChildValueObjects(true).build())
    — не выбирать обновление, возвращается только одно «изменение» — исходное «создание»
  • Код: Выделить всё

    javers.findSnapshots(QueryBuilder.byInstanceId(id, clazz).withChildValueObjects(true).build())
    — показаны две версии, и при изменении свойства я вижу, что «исключение» было обновлено.
  • Код: Выделить всё

    javers.findShadows(QueryBuilder.byInstanceId(id, clazz).withChildValueObjects(true).build())
    — показывает две версии: с ожидаемым «базовым» значением (без исключений) и новую версию с исключениями.
В журналах после обновления. , я вижу следующее:

Код: Выделить всё

org.javers.core.Javers                   : Commit(id:11.00, snapshots:3, author:unknown, changes -), done in 5 ms (diff:4 ms, persist:1 ms)
что указывает на отсутствие изменений 🤔 Наверняка хашод в исходном состоянии объекта и обновленном различается.
Я в замешательстве — что я делаю здесь не так?

для справки:
  • JDK - 21 (OpenJDK / Затмение Темурина)
  • spring-boot-starter-parent 3.3.4
  • javers-spring-boot-starter-sql — 7.6.2


Подробнее здесь: https://stackoverflow.com/questions/792 ... -nested-vo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»