Hibernate mapeo clave externa?
-
11-09-2019 - |
Pregunta
Tengo una entidad A que tiene una clave externa de la entidad B:
entity A --> id, entity_a_name, foreign_key_entity_B
Cuando llamo
return session.createCriteria(EntityA.class).list();
Me da la propiedad de entityB dentro de la entidad A también. ¿Cómo puedo hacer que la carga perezosa para que no se cargue enityB si no es necesario?
Solución
No está claro a partir de la descripción de qué tipo de relación que está hablando, pero si es Varios a uno o uno-a-uno, las cosas no son tan sencillas. Si A.entityB
es anulable (no opcional) entonces Hibernate se ve obligado a ansioso-carga la relación con el fin de ver si la propiedad es nulo. Sólo mediante el marcado de la relación como no opcional (en cuyo caso Hibernate asume que no es nula, ya que es un error de otro tipo) puede que se cargue con pereza.
Otros consejos
@ LazyCollection : define la opción pereza en @ManyToMany y asociaciones @OneToMany. LazyCollectionOption puede ser TRUE (La colección es perezoso y será cargado cuando se accede a su estado), EXTRA (la colección es perezoso y todas las operaciones intentarán evitar la carga de colección, esta es especialmente útil para la gran colecciones al cargar toda la elementos no es necesario) y FALSO (Asociación no perezoso)
@ Obtener : define la estrategia de recuperación utiliza para cargar el asociación. FetchMode puede ser SELECT (Un selecto se activa cuando el asociación necesita ser cargado), Subseleccionar (sólo disponible para colecciones, utilizan una subselección estrategia - por favor refiérase a la Documentación de referencia para hibernar más información) o JOIN (utilizar una SQL JOIN para cargar la asociación durante la carga de la entidad propietario). UNIRSE anula cualquier atributo perezoso (un AS sociación cargado a través de un JOIN estrategia no puede ser perezoso).