¿Cuál es la mejor manera de cargar un gráfico de objetos de Hibernate antes de usarlo en una interfaz de usuario?

StackOverflow https://stackoverflow.com/questions/79843

  •  09-06-2019
  •  | 
  •  

Pregunta

La situación es esta:

  • Tiene un contexto hibernado con un gráfico de objetos que tiene una carga perezosa definida.
  • Desea usar los objetos Hibernate en su interfaz de usuario como es sin tener que copiar los datos en algún lugar.
  • Existen diferentes contextos de interfaz de usuario que requieren diferentes cantidades de datos.
  • Los datos son demasiado grandes para simplemente cargar todo el gráfico cada vez.

¿Cuál es el mejor medio para cargar todos los objetos apropiados en el gráfico de objetos de forma configurable para que se pueda acceder a ellos sin tener que volver a la base de datos para cargar más datos?

Alguna ayuda.

¿Fue útil?

Solución

Digamos que tienes el Cliente y en un momento tienes que hacer algo con sus Órdenes y tal vez él tenga un Bono por sus Órdenes.

Luego definiría un Repositorio con una interfaz fluida que me permitirá decir algo como:

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

Y ahí tienes al cliente con todo lo que necesitas.Es preferible que sepas de antemano lo que necesitarás para la operación actual.De esta manera, puede evitar viajes no deseados a la base de datos (los nuevos desarrolladores de su equipo generalmente harán esto: llamar a una propiedad y no ser conscientes del hecho de que en realidad es una llamada a la base de datos).

Otros consejos

Si es una aplicación web y estás usando Spring, OpenSessionInViewFilter podría ser la solución a tus problemas.

Un enfoque que utilizamos en nuestros proyectos es crear un servicio para cada vista que tenga.Luego, la vista recupera el subgráfico que necesita para esta vista específica, siempre intentando reducir la cantidad de SQL enviados a la base de datos.Por lo tanto, utilizamos muchas combinaciones para obtener los objetos asociados n:1.

Si está utilizando una aplicación de escritorio de 2 niveles conectada directamente a la base de datos, puede dejar los objetos adjuntos y cargar datos adicionales en cualquier momento de forma automática.De lo contrario, tendrá que volver a adjuntarlo a la sesión e inicializar la asociación que necesita con Hibernate.initialize(Object entity, String propertyName)

(Sin memoria, tal vez no sea 100% correcto)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top