La création Envers personnalisé révision de l'entité
Je suis en train de configuration d'audit pour notre projet.
J'ai commencé à partir de la configuration par défaut fonctionne très bien.
La prochaine étape est de stocker de l'utilisateur qui a effectué des changements.
Suivant le manuel, j'ai créé l'entité personnalisée de révision:
package com.csbi.samples.utils.audit;
import java.io.Serializable;
import java.text.DateFormat;
import java.util.Date;
import org.hibernate.envers.RevisionNumber;
import org.hibernate.envers.RevisionTimestamp;
import org.hibernate.envers.RevisionEntity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
@Table(name="REVISIONS")
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity implements Serializable {
private static final long serialVersionUID = -1255842407304508513L;
@Id
@GeneratedValue
@RevisionNumber
private int id;
@RevisionTimestamp
private long timestamp;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Transient
public Date getRevisionDate() {
return new Date(timestamp);
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public boolean equals(Object o) {
if(this == o) return true;
if(!(o instanceof CustomRevisionEntity)) return false;
CustomRevisionEntity that = (CustomRevisionEntity) o;
if(id != that.id) return false;
if(timestamp != that.timestamp) return false;
if(timestamp != that.timestamp) return false;
if(username != that.username) return false;
return true;
}
public int hashCode() {
int result;
result = id;
result = 31 * result + (int) (timestamp ^ (timestamp >>> 32));
return result;
}
public String toString() {
return "DefaultRevisionEntity(user = " + username + "id = " + id + ", revisionDate = " + DateFormat.getDateTimeInstance().format(getRevisionDate()) + ")";
}
}
Et également des modules d'écoute personnalisés:
package com.csbi.samples.audit;
import org.hibernate.envers.RevisionListener;
public class CustomRevisionListener implements RevisionListener {
public void newRevision(Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setUsername("username"); //for testing
}
}
Voici quelques lignes du journal:
DEBUG: org.mise en veille prolongée.envers.la configuration.les métadonnées.AuditMetadataGenerator -
La génération de la première étape de vérification de la cartographie pour l'entité
com.csbi.les échantillons.domaine.De la propriété.
DEBUG:
org.mise en veille prolongée.envers.la configuration.les métadonnées.AuditMetadataGenerator -
La génération de deuxième passage de l'audit de la cartographie pour l'entité
com.csbi.les échantillons.domaine.De la propriété.
INFO : org.mise en veille prolongée.cfg.HbmBinder
- Cartographie de la classe: com.csbi.les échantillons.domaine.Property_AUD -> PROPERTIES_AUD
INFO : org.mise en veille prolongée.cfg.HbmBinder de Mappage de classe:
org.mise en veille prolongée.envers.DefaultRevisionEntity -> REVINFO
Prendre un coup d'oeil à la dernière ligne de la sortie.
Il y a encore DefaultRevisionEntity
mappé au lieu de CustomRevisionEntity
.
Je n'ai aucune idée de ce qui est mal. Toutes les suggestions?
l'utilisation des variables statiques pour injection si vous utilisez printemps ou en service de l'usine si vous utilisez couture. 209.132.182.48/message/641790. Espérons que cela aide.
OriginalL'auteur Vyacheslav | 2011-11-23
Vous devez vous connecter pour publier un commentaire.
Résolu. L'entité n'est pas en scanné par Hibernate répertoire.
Il y a une liste de paquets en mode veille prolongée config ou en mode veille prolongée le cadre du printemps de config décrivant dans les répertoires qui hibernent à la recherche d'un des entités. L'Entité décrite ci-dessus n'était pas dans des répertoires.
Merci, cela a aidé, j'ai aussi oublié à ajouter à l'entité de mise en veille prolongée
SessionFactory
🙂OriginalL'auteur Vyacheslav