Заполнение столбцов измененных флагов для старых ревизий в Hibernate Envers - PullRequest
0 голосов
/ 30 мая 2019

Я добавляю измененные флаги в уже существующую таблицу аудита.Флаги для новых ревизий, добавленных в таблицу, заполнены правильно, но я хочу, чтобы флаги для уже существующих ревизий были заполнены.

Я мог бы процедурно проверять ревизии на наличие изменений и обновлять столбцы, но это заняло бы много временивремя написать конкретную процедуру для каждой таблицы.

Например, это данные пользователя из моей таблицы user_aud перед добавлением столбцов:

id  |rev  |revtype|username     |password
100 |51544|1      |pdacostaporto|420bed36a05fa4668b1baeff18ffce96
100 |46343|0      |pdacostaporto|286755fad04869ca523320acce0dc6a4

Когда я задаю *От 1009 * до true в моей сущности User следующим образом:

@Entity
@Audited(withModifiedFlag = true)
public class User {
   // Attributes, getters and setters...
}

, затем Hibernate добавляет столбцы для флагов, но со значениями null в существующих строках, работая должным образом для новых ревизий.:

id  |rev  |revtype|username     |password                         |username_mod |password_mod
100 |60745|1      |pdacostaporto|4305664d643844973ccb52cbb7c369f8 |false        |true
100 |51544|1      |pdacostaporto|420bed36a05fa4668b1baeff18ffce96 |null         |null
100 |46343|0      |pdacostaporto|286755fad04869ca523320acce0dc6a4 |null         |null

Я бы хотел заполнить null столбцы уже существующих строк правильными значениями, как это:

id  |rev  |revtype|username     |password                         |username_mod |password_mod
100 |60745|1      |pdacostaporto|4305664d643844973ccb52cbb7c369f8 |false        |true
100 |51544|1      |pdacostaporto|420bed36a05fa4668b1baeff18ffce96 |false        |true
100 |46343|0      |pdacostaporto|286755fad04869ca523320acce0dc6a4 |false        |false

1 Ответ

0 голосов
/ 30 мая 2019

К сожалению, в настоящее время не существует автоматизированного способа, которым Envers будет обновлять существующие строки истории аудита для этой функции, если вы включите ее после того, как в таблице появятся существующие данные;это то, что вы должны сделать вручную.

Если вы решите сделать это вручную, вот логика:

  1. Строки с REVTYPE=0 всегда будут иметь столбцы _MODравно true или 1.Я заметил, что в исходном вопросе они были установлены на false, и это неправильно и может создать проблемы при запросе.
  2. Строки с REVTYPE!=0 будут установлены на true или 1, если значение длястолбец данных отличается от значения в том же столбце в предыдущей редакции.

В идеале вы должны иметь возможность использовать метаданные базы данных и написать один скрипт, который будет принимать имя таблицыи выполнять все необходимые операции независимо от таблицы.

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