he estado también fan de la -Convenio GenericDao y GenericDaoImpl con algún apoyo de las clases de ayuda genéricos, debe guardar o borrar el requerir acciones adicionales para algunas clases persistentes:
public interface PersistListener<T> {
void onPersist(T item);
}
Se pueden usar construcciones similares para su eliminación. Esto es especialmente útil si necesita algún tipo de registro de eventos para escribir cada actividad y no desea usar AOP para eso.
Mis GenericDaoImpl se vería algo como esto:
public class GenericDaoImpl<T> extends HibernateTemplate {
public void setPersistListeners(List<PersistListener> listeners) {
this.persistListeners = new GenericInterfaceHandler(listeners,
PersistListener.class);
}
// hibernate updates the key to the object itself
public T save(T item) {
getSession().save(item);
List<PersistListener<T>> listeners = this.persistListeners.getAll(item);
for (PersistListener<T> listener : listeners)
listener.persist(item);
}
// ...
}
Lo que el persistListener en el ejemplo anterior va a hacer es encontrar una coincidencia con PersistListener clase genérica a la de la clase dada como parámetro. Se encuentra así, luego la llamada se delega al oyente (s) adecuado (s). My GenericInterfaceHandler también se puede usar para devolver solo el controlador más específico o el único controlador para la clase dada, si está presente.
Si le interesa, también podría publicar la implementación de GenericInterfaceHandler, ya que es una construcción bastante poderosa en muchas ocasiones.
Gracias! Además, ¿tendría sentido poner mis interfaces DAO en un paquete dao y la implementación en un paquete dao.hibernate (para que la implementación pueda intercambiarse más adelante)? – oym
Eso tiene sentido – Kevin