English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La estructura de la base de datos es la siguiente
La tabla strategy tiene claves foráneas member_id (asociada a la tabla member) y strategy_category (asociada a la tabla category), mientras que la tabla member tiene una clave foránea position_id (asociada a la tabla positions)
Si la página frontal consulta directamente el contenido de la tabla stategy, nuestra sentencia hql se escribiría así
Stringhql="FromStrategywhereid=:id";
El console reportará el error nosession porque hibernate carga por defecto de manera perezosa, solo carga los objetos asociados cuando los necesitamos. Aquí, cuando necesitamos obtener las propiedades de los objetos asociados en el frente, la sesión ya se ha cerrado, por lo que se reportará este error.
¿Entonces, cómo resolverlo?
Se recomienda usar leftjoinfetch para cargar objetos en lugar de cambiar de carga perezosa por defecto en la anotación a carga apresurada, ya que la eficiencia será muy baja.
La sentencia es la siguiente
Strategystrategy=(Strategy)sessionFactoryUtil.getSession() .createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id") .setInteger("id",id).uniqueResult();
Es necesario prestar atención aquí porque la tabla member asociada está asociada con la tabla positions, por lo que es necesario cargar la otra. Otra cosa a tener en cuenta es que el s.id debe escribirse así porque el nombre del clave principal de cada tabla es id. Si no se especifica, el sistema no puede identificarlo.
Resumen
Esto es todo el contenido sobre el tema de discusión del problema de carga apresurada de hibernate (asociación de múltiples claves foráneas). Espero que sea útil para todos. Los amigos interesados pueden continuar leyendo otros temas relacionados en este sitio, y bienvenidos a dejar comentarios si hay algo que no esté bien. Agradecemos el apoyo de los amigos a este sitio!
Declaración: El contenido de este artículo se obtiene de la red, es propiedad del autor original, el contenido se contribuye y carga de manera autónoma por los usuarios de Internet, este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @) para denunciar, y proporcionar evidencia relevante. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.