miarę envers obawia się, podstawowy przypadek użycia jest nagrywać pełną kontrolę podmiotu (parametry my chcesz przez @Anited adnotation). W przypadku, o którym wspomniałeś, nowe podmioty mogą zostać dodane poprawnie, ale w przypadku istniejącego problemu wystąpiłoby problem, ponieważ w tabeli kontroli nie ma żadnej rewizji.
Załóżmy rozwiązać sprawę z pomocą scenariusza:
Powiedzmy podmiot podjęliśmy pod uwagę to użytkowników. Stół, który powstaje teraz, aby obserwować historię, powiedzmy, jest users_audit. Oprócz tego istnieje również możliwość obserwowania i rejestrowania wszystkich zmian w danym rekordzie, pod numerem revinfo.
Problem jest na pierwszym miejscu, ponieważ w przypadku każdej aktualizacji warstwa trwałości nie może znaleźć rekordu wersji. Aby to naprawić, wszystkie istniejące wpisy muszą znajdować się w tabeli, a odwzorowanie klucza obcego z tabelą revinfo nie powinno się zepsuć. Stąd też, dwie rzeczy muszą być zrobione:
- Wstawianie wartości tymczasowe w tabeli revinfo tak że rev może pełnić rolę klucza obcego
- skopiować dane z użytkowników stół do users_audit stół.
Próbka Liquibase pliku może być tak:
CREATE TABLE `revinfo` (
`rev` int(11) NOT NULL AUTO_INCREMENT,
`revtstmp` bigint(20) DEFAULT NULL,
PRIMARY KEY (`rev`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `revinfo` (`revtstmp`) select updated_at from users u;
SET @position := 0;
insert into users_audit (
rev,
revtype,
id,
name,
type,
mobile_number,
password,
parent_id,
profile_image_uri,
is_active,
created_at,
updated_at
) select @position := @position +1, 0,
id,
name,
type,
mobile_number,
password,
parent_id,
profile_image_uri,
is_active,
created_at,
updated_at from us
Cześć! Czy rozwiązałeś swój problem? Mam również ten sam problem. – gipinani
Nie, podałem na Envers i użyłem wyzwalaczy bazy danych ON INSERT i ON UPDATE –