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?

Maintenant... comment définir le "nom d'utilisateur" à quelque chose de significatif... je ne peux pas obtenir ce droit car je n'ai aucune idée de qui est de faire la modification?!
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