Pregunta

Estoy trabajando en un (aplicación de Hibernate) JPA, Spring y rayas aplicación web. Tengo un número de entidades JPA que tienen los siguientes campos en común, tanto para fines de auditoría y de consulta:

CreatedBy - el ID de usuario de la persona que creó la entidad. CreatedOn - la fecha en que la entidad fue creada updatedBy - el ID de usuario de la persona que actualizó por última vez la entidad UpdatedOn - la fecha en que la entidad se actualizó por última vez

Tengo mi aplicación de trabajo para que CreatedOn y UpdatedOn se ajustan automáticamente cuando se conserva la entidad, pero no estoy seguro de cómo puedo conseguir los campos CreatedBy y updatedBy pobladas sin tener que pasar a través de la abierta una sesión de ID de usuario hasta el final de la clase del controlador a los DAOs.

¿Alguien tiene alguna sugerencia sobre cómo podría hacer esto sin pasar identificadores de usuario por todo el lugar? Tenga en cuenta que el ID de usuario actual se almacena en el objeto HttpSession en este momento, por lo que mi backend necesita acceder a los datos de alguna manera esto ...

Gracias!

¿Fue útil?

Solución 2

He decidido que una ThreadLocal es probablemente la forma más limpia de hacer esto en mi aplicación.

Otros consejos

Puede echar un vistazo a uno de estos enfoques para pasar el ID de usuario como contexto en la capa de negocio:

(Los mensajes pueden seguir siendo relevante incluso si no se está usando EJB. El segundo sentido posterior maquillaje sin embargo, sólo si se utiliza de primavera con JTA)

Yo personalmente impedirlos enfoque, tal como la concibo dos problema con él:

  • capacidad de prueba: tendrá que ser establecido en la prueba contextual de datos
  • Contrato: datos contextuales participan en el contrato de uso de la entidad, pero no es claramente visible en la interfaz.

El paso del ID de usuario "por todo el lugar" puede parecer un gran trabajo, pero creo que es más limpio.

Para establecer la fecha y la ID de usuario de forma automática cuando se crea entidad o actualización, se puede utilizar un EntityListener o ciclo de vida de las devoluciones de llamada (tal vez usted ya está haciendo eso). Espero que ayude ...

Me gustaría crear una clase como esta:


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

  //getters and setters

Sus clases de entidades que tengan el requisito de que has descrito simplemente extender esta clase, que había que establecer las variables en la capa que necesitas (controlador por ejemplo) y que no tienen que preocuparse por todo el camino en los DAOs.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top