Estoy usando transacciones de Spring por lo que la transacción aún está activa cuando ocurre la conversión de POJO a DTO.Evitar que Dozer active la carga diferida de Hibernate
Me gustaría evitar que Dozer active la carga diferida, de modo que las consultas sql ocultas nunca ocurran: todas las búsquedas deben hacerse explícitamente a través de HQL (para obtener el mejor control de las interpretaciones).
¿Es una buena práctica (no la puedo encontrar documentada en ningún lado)?
¿Cómo hacerlo con seguridad?
yo probamos este antes de la conversión DTO:
PlatformTransactionManager tm = (PlatformTransactionManager) SingletonFactoryProvider.getSingletonFactory().getSingleton("transactionManager");
tm.commit(tm.getTransaction(new DefaultTransactionDefinition()));
no sé qué pasa con la transacción, pero la sesión de Hibernate no quede cerrado y la carga lenta persiste.
yo probamos este:
SessionFactory sf = (SessionFactory) SingletonFactoryProvider.getSingletonFactory().getSingleton("sessionFactory");
sf.getCurrentSession().clear();
sf.getCurrentSession().close();
y evita que la carga diferida, pero es una buena práctica para manipular la sesión directamente en la capa de aplicación (que se llama "fachada" en mi proyecto)? ¿Qué efectos secundarios negativos debería temer? (Ya he visto que las pruebas que implican conversiones de POJO -> DTO no podrían lanzarse más a través de las clases de prueba Spring de AbstractTransactionnalDatasource, porque estas clases intentan desencadenar una reversión en una transacción que ya no está vinculada a una sesión activa).
También intenté establecer la propagación en NOT_SUPPORTED o REQUIRES_NEW, pero reutiliza la sesión actual de Hibernate y no impide la carga diferida.
Gracias, esto es genial, incluso puedo confirmar que no está documentado en otro lugar que no sea aquí: http://www.google.fr/search?q=CustomFieldMapper+PersistentSet – Tristan
Además, en una versión reciente de Dozer (5.3.0), hay otra forma de hacerlo (http://sourceforge.net/tracker/?func=detail&aid=2993122&group_id=133517&atid=727370) – Tristan
La línea 'destination = null' es una operación no operativa, no estoy seguro de por qué esta ahí... –