Как проверить @ElementCollection объектов значений без идентификатора?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как проверить @ElementCollection объектов значений без идентификатора?

Сообщение Anonymous »

Я пытаюсь провести аудит @ElementCollection объектов значений (@Embeddable) с помощью Hibernate Envers (Hibernate 6.x, ValidityAuditStrategy).
Поскольку это DDD, объект значения не должен иметь собственный @Id.
Но Hibernate Envers, похоже, не может правильно отслеживать изменения без первичного ключа.
Когда я обновляю родительский элемент, Envers выдает ошибки например:

ОШИБКА: повторяющееся значение ключа нарушает уникальное ограничение "..._pkey"

ОШИБКА: столбец ... "revend" не существует

Мы попробовали общий обходной путь с @OrderColumn / SETORDINAL, но он не решает проблему — Envers все еще пытается вставить дубликаты для одного и того же (owner_id, rev, setordinal).

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

@Entity
@Audited
class ParentEntity {

@Id
private Long id;

@ElementCollection
@OrderColumn(name = "position")
@CollectionTable(name = "parent_values",
joinColumns = @JoinColumn(name = "parent_id"))
private List values = new ArrayList();
}
@Embeddable
@Audited
class ValueObject {

private String propertyA;
private Integer propertyB;

// equals/hashCode implemented based on all fields
}
Что мы пробовали/уже знаем
  • Использование @OrderColumn, чтобы Envers имел стабильный ключ
  • Добавлен целочисленный порядковый столбец (позиция), аналогичный обходному пути, описанному здесь:
    Аудит @ElementCollection/@Embeddable с помощью hibernate-envers
  • Правильное значение /hashCode на ValueObject (@EqualsAndHashCode)
  • Список вместо Set (поскольку Set потерял порядок в БД)
  • Использование ValidityAuditStrategy
Существует ли какой-либо поддерживаемый способ аудита изменяемого @ElementCollection @Embeddable без введения синтетического @Id для объекта значения?
Или Envers фундаментально полагаться на технический идентификатор для аудита коллекций в рамках ValidityAuditStrategy?
Любой реальный работающий пример или рекомендуемая альтернатива дизайна приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/798 ... without-id
Ответить

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

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

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

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

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