Sto usando spring-data-envers nella mia applicazione di avvio a molla. Posso registrare correttamente gli audit sulle mie entità.Come trovare tutte le revisioni per un'entità utilizzando i dati di inversione di primavera?
Ora, ho bisogno di mostrare i dati controllati all'utente nell'interfaccia utente. Come se ci fosse un modulo di ricerca in cui l'utente può selezionare la durata e l'entità per cui desidera vedere i registri di controllo.
RevisionRepository fornito da string-data-envers ha solo tre metodi come segue.
@NoRepositoryBean
public interface RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>> {
/**
* Returns the revision of the entity it was last changed in.
*
* @param id must not be {@literal null}.
* @return
*/
Revision<N, T> findLastChangeRevision(ID id);
/**
* Returns all {@link Revisions} of an entity with the given id.
*
* @param id must not be {@literal null}.
* @return
*/
Revisions<N, T> findRevisions(ID id);
/**
* Returns a {@link Page} of revisions for the entity with the given id.
*
* @param id must not be {@literal null}.
* @param pageable
* @return
*/
Page<Revision<N, T>> findRevisions(ID id, Pageable pageable);
}
Come si scrive una query personalizzata per ottenere tutte le revisioni di un'entità tra due date da un determinato utente.
Si noti che, ho aggiunto ulteriori colonne alla tabella user_rev_entity in cui memorizzo ID utente e data di modifica. Se mi unisco a questa tabella con la tabella entity_aud, posso ottenere i risultati.
Di seguito sono riportati gli script delle tabelle di controllo.
CREATE TABLE `user_rev_entity` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`timestamp` bigint(20) NOT NULL,
`created_by` bigint(20) NOT NULL,
`created_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
CREATE TABLE `revchanges` (
`rev` int(11) NOT NULL,
`entityname` varchar(255) DEFAULT NULL,
KEY `FK_et6b2lrkqkab5mhvxkv861n8h` (`rev`),
CONSTRAINT `FK_et6b2lrkqkab5mhvxkv861n8h` FOREIGN KEY (`rev`) REFERENCES `user_rev_entity` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `roles_aud` (
`role_id` bigint(20) NOT NULL,
`rev` int(11) NOT NULL,
`revtype` tinyint(4) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`description_mod` bit(1) DEFAULT NULL,
`display_name` varchar(255) DEFAULT NULL,
`display_name_mod` bit(1) DEFAULT NULL,
`is_enabled` bit(1) DEFAULT NULL,
`enabled_mod` bit(1) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`title_mod` bit(1) DEFAULT NULL,
PRIMARY KEY (`role_id`,`rev`),
KEY `FK_pkqm51vsc35w2axvnns4bpas9` (`rev`),
CONSTRAINT `FK_pkqm51vsc35w2axvnns4bpas9` FOREIGN KEY (`rev`) REFERENCES `user_rev_entity` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Quindi, in sostanza sto cercando tutte le modifiche apportate da un particolare utente durante un determinato periodo di tempo per un'entità dire Ruolo.
Ci saranno molte più tali entità.
* Non una misura perfetta dal momento che si prendere tutte le revisioni dal database *. Suppongo che tu possa dire che due volte, la tabella della storia dovrebbe essere la più pesante in un database, questo è sicuramente qui che non vuoi post-filtro. – Walfrat