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!!!