EntityManager es la clase que pilota toda la persistencia. Para más detalles pregunta a google!!
En este capítulo voy a explicar como crear tu propio EntityManager para que cumpla la LPD…. sin tener que arrastrarlo a todos! Esta es una solución… aunque puede que no sea la mejor! Se agradece cualquier comentario comentando otras soluciones.
QUÉ QUEREMOS CONSEGUIR
- Evitar tener que registrar todas las veces que utilizamos persistencia con cualquier objeto la actualización de los campos de las tablas de la base de datos: «creado_por» , «modificado_por» o «borrado_por» junto a las fechas correspondientes «fecha_creacion», «fecha_borrado», «fecha_modificacion».
CÓMO LO HACEMOS
- Crearemos nuestra nueva clase que extiende de EntityManager
public class EntityManagerWrapper implements EntityManager {
private EntityManager entityManager = null;
- Ahora tendremos que implementar y sobrescribir todos los métodos menos «persist» y «delete»
- Los que sobrescribimos quedarán del estilo:
@Override
public <T> T merge(T t) {
return this.entityManager.merge(t);
}
- Persist quedará:
@Override public void persist(Object o) { try{ //seteando traza de usuario User user = (User)ApplicationContext.getInstance().getFromSession("user"); Method method = o.getClass().getMethod("getCreatedBy", (Class<?>[]) null); Object createdBy = method.invoke(o, (Object[]) null); if(createdBy == null){ method = o.getClass().getMethod("setCreatedBy", new Class[]{ Integer.class }); method.invoke(o, new Object[]{ user.getUserId() }); method = o.getClass().getMethod("setCreationDate", new Class[]{ Date.class }); method.invoke(o, new Object[]{ new Date() }); } method = o.getClass().getMethod("setModifiedBy", new Class[]{ Integer.class }); method.invoke(o, new Object[]{ user.getUserId() }); method = o.getClass().getMethod("setModificationDate", new Class[]{ Date.class }); method.invoke(o, new Object[]{ new Date() }); } catch (Exception ex) { //ErrorManager.showExceptionDialog(ex); } this.entityManager.persist(o); lastEntity = o; } <ol> <li>Delete nos quedará</li> </ol> public void delete(Object o) { try { //seteando traza de usuario User user = (User)ApplicationContext.getInstance().getFromSession("user"); Method method = o.getClass().getMethod("setDeletedBy", new Class[]{ Integer.class }); method.invoke(o, new Object[]{ user.getUserId() }); method = o.getClass().getMethod("setDeletedDate", new Class[]{ Date.class }); method.invoke(o, new Object[]{ new Date() }); } catch (Exception ex) { ErrorManager.showExceptionDialog(ex); } this.entityManager.persist(o); lastEntity = o; }
SUERTE!!!