Question

Je travaille sur une (mise en œuvre de mise en veille prolongée) JPA, application web Spring and Stripes. J'ai un certain nombre d'entités JPA qui ont les domaines suivants en commun à des fins de vérification et de requête:

CreatedBy - l'ID utilisateur de la personne qui a créé l'entité. createdOn - la date à laquelle l'entité a été créée updatedBy - l'ID utilisateur de la personne qui dernière mise à jour de l'entité updatedOn - la date à laquelle l'entité a été mise à jour

J'ai mon application de travail afin que createdOn et updatedOn sont réglées automatiquement lorsque l'entité est conservée, mais je ne sais pas comment je peux obtenir les champs CreatedBy et updatedBy peuplées sans avoir à passer par l'utilisateur connecté actuellement ID de l'utilisateur tout le chemin de la classe du contrôleur aux OTI.

Quelqu'un at-il des suggestions sur la façon dont je pourrais le faire sans passer au-dessus de l'ID utilisateur tout lieu? Notez que l'ID utilisateur courant est stocké dans l'objet HttpSession au moment, donc mon back-end a besoin d'accéder en quelque sorte ces données ...

Merci!

Était-ce utile?

La solution 2

J'ai décidé que ThreadLocal est probablement la plus propre façon de le faire dans ma demande.

Autres conseils

Vous pouvez jeter un oeil à l'une de ces approches pour transmettre l'ID utilisateur comme contexte dans la couche d'affaires:

(Les messages peuvent encore être pertinents, même si vous ne l'utilisez EJB. Le second sens post font cependant que si vous utilisez Spring JTA)

Je décourage personnellement ces approche, comme je perçois deux problèmes avec elle:

  • testabilité: données contextuelles devront être mis en place dans le test
  • Contrat: données contextuelles participent au contrat à utiliser l'entité, mais ne sont pas clairement visibles dans l'interface.

Passage userID « dans tous les sens » peut sembler un gros travail, mais je pense qu'il est plus propre.

Pour définir la date et l'ID utilisateur automatiquement lorsque l'entité est créée ou mise à jour, vous pouvez utiliser EntityListener ou callbacks cycle de vie (peut-être vous faire déjà). Hope it helps ...

Je crée une classe comme ceci:


@MappedSuperclass
public abstract class AuditableDomainClass {
  private long createdBy;
  private long updatedBy;

  //getters and setters

Vos classes d'entités qui ont l'exigence que vous avez décrit serait simplement étendre cette classe, vous devriez vous définir des variables dans la couche que vous devez (contrôleur par exemple) et vous n'avez pas besoin de se soucier tout le chemin dans les OTI.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top