Administración de sesiones usando Hibernate en una aplicación Swing de múltiples subprocesos.

Actualmente estoy trabajando en uno de mis proyectos favoritos (bastante grande), una aplicación Swing que, por su propia naturaleza, necesita ser multiproceso. Casi todas las interacciones de los usuarios pueden obtener datos de algunos servidores remotos a través de Internet, ya que ni controlo estos servidores ni la propia Internet, por lo que los tiempos de respuesta largos son inevitables. Obviamente, una IU de Swing no puede volver a pintarse mientras la EDT está ocupada, por lo que todas las llamadas a servidores remotos deben ser ejecutadas por subprocesos de fondo.

Mi problema:

Los datos obtenidos por los subprocesos en segundo plano se "enriquecen" con datos de una base de datos local (en memoria) (el servidor remoto devuelve las ID / referencias a los datos en la base de datos local). Estos datos más tarde finalmente pasan a la EDT donde se convierte en parte del modelo de vista. Algunas entidades no están completamente inicializadas en este punto (habilitación de búsqueda diferida), por lo que el usuario podría activar la recuperación perezosa, por ejemplo. desplazamiento en un JTable. Dado que la sesión de hibernación ya está cerrada, se activará una LazyInitializationException. No puedo saber cuándo el usuario puede activar la recuperación perezosa, por lo que crear una sesión a pedido / adjuntar el objeto separado no funcionará aquí.

"Resolví" este problema por:

utilizando una única sesión (sincronizada, ya que las instancias de sesión no son seguras para subprocesos) para toda la aplicacióndeshabilitando la perezosa recuperación por completo

Si bien esto funciona, el rendimiento de la aplicación ha sufrido mucho (a veces es casi inutilizable). La desaceleración se debe principalmente a la gran cantidad de objetos que cada consulta recupera.

Actualmente estoy pensando en cambiar el diseño de la aplicación a 'Sesión por subproceso' y migrar todas las entidades recuperadas por subprocesos no EDT a la Sesión del subproceso EDT (similar aEsta publicación en los foros de Hibernate.).

Nota al margen: los problemas relacionados con las actualizaciones de la base de datos no se aplican, ya que todas las entidades de la base de datos son de solo lectura (datos de referencia).

Cualquier otra idea sobre cómo usar Hibernatecon carga perezosa en este escenario?