2009-11-12 7 views
1

J'ai un certain type d'architecte questionpropriétés d'entité de remplissage automatique

Je développe une application, basée sur Spring et Hibernate (configuration annotée) Pour chaque table dans ma base de données, j'ai ajouté 4 champs (?): CreatedBy et ModifiedBy (Chaîne), créé et modifié (Datetime). Respectivement chaque classe d'entité a aussi ces champs et paires getter/setter. Donc, je veux trouver une solution de meilleure pratique pour remplir ces champs au lieu d'ajouter pour chaque code supplémentaire DAO. C'est possible?

Je serai heureux de toute proposition

Répondre

3

Certainement. Il suffit d'ajouter ce code à une classe de base pour toutes vos instances persistantes et activer le traitement d'annotation:

@PrePersist 
public void prePersist() 
{ 
    if (created == null) 
    { 
     created = updated = createCurrentTimestamp(); 
     createdBy = updatedBy = CurrentUser.get(); 
    } 
} 

@PreUpdate 
public void preUpdate() 
{ 
    updated = createCurrentTimestamp(); 
    updatedBy = CurrentUser.get(); 
} 

public static java.sql.Timestamp createCurrentTimestamp() 
{ 
    final long now = System.currentTimeMillis(); 
    final java.sql.Timestamp ts = new java.sql.Timestamp (now); 
    ts.setNanos(((int)(now % 1000)) * 1000000); 
    return ts; 
} 

CurrentUser est un ThreadLocal<String> qui me permet de préciser au début d'une opération utilisateur a commencé. De cette façon, tout objet qui sera touché contiendra les informations correctes.

Sans traitement d'annotation, activez les options correspondantes dans votre fichier HBM.

0

Regardez Spring AOP. Vous pouvez affecter un "intercepteur" à vos méthodes DAO, afin que les objets soient d'abord gérés par l'intercepteur, puis que l'exécution passe aux méthodes DAO.
Dans l'intercepteur, vous pouvez remplir les objets avec les données dont vous avez besoin.

0

Une possibilité serait de définir un EventListener Hibernate qui peut remplir ces champs juste avant que chaque entité soit vidée dans la base de données

Questions connexes