para - orm java
2 entidades JPA en la misma mesa (1)
Digamos que tengo una tabla con 200 columnas y la mayoría de ellas nunca se usan.
Asigné SmallEntity a las 10 columnas que se usan con frecuencia. Lo uso en las asociaciones con otras entidades. Se carga rápido, consume poca memoria y me hace feliz.
Pero a veces necesito mostrar las 200 columnas. Me gustaría asignar la clase BigEntity en las 200 columnas. No está vinculado a ninguna otra entidad, no tiene asociación.
Pregunta: ¿Tienes alguna experiencia haciendo eso? ¿Conoce algún problema que pueda tener Hibernate, como por ejemplo en el caché de primer nivel, la comprobación sucia y el ciclo de vida de la entidad en general?
La manera más sencilla de hacer esto es mapear propiedades que no usas a menudo como lazy :
<property name="extendedProperty" lazy="true" />
... or using Annotations ...
@Basic(fetch = FetchType.LAZY)
String getExtendedProperty() { ... }
Hibernate no cargaría tales propiedades inicialmente; en su lugar, se cargarán bajo demanda (cuando se acceda por primera vez). Puede forzar a Hibernate a cargar todas las propiedades usando la cláusula fetch all properties
en su consulta HQL.
Otro posible escenario es mapear dos entidades completamente separadas a la misma tabla, pero hacer que una de ellas sea immutable . Tenga en cuenta que Hibernate los tratará como entidades diferentes, y que la memoria caché de primer / segundo nivel estará completamente separada para ambos (por lo que la inmutabilidad es importante).
NO podrá lograr esta funcionalidad a través de la asignación de herencia porque Hibernate siempre devuelve un tipo de entidad concreto real. Eche un vistazo a mi respuesta a la pregunta de Hibernate Herencia Estrategia para una explicación detallada.