Si se produce una consulta en cascada en Hibernate, puede haber problemas de carga perezosos. Por ejemplo, ahora tengo una clase de cuenta (administrador), categoría (categoría de producto) y clase de producto (producto). De izquierda a derecha, es una relación de uno a muchos, y de derecha a izquierda, se establece @ManytoOne (fetch = fetchType.lazy). Ahora quiero encontrar la información del producto y empaquetarla en formato JSON para pasarla a la recepción. Utilizo la instrucción de consulta en segundo plano como:
Desde el producto P Left Join Fetch P.Category Donde P.Name Like: Nombre
De esta manera, puede averiguar el producto, y luego la categoría en el producto también se coloca. Sin embargo, la cuenta en la categoría no es un objeto real, sino un objeto proxy temporal. Esto es fácil de entender, porque revisé el producto y solo la categoría en cascada. En cuanto a la categoría y la cuenta, se configura de acuerdo con el real (perezoso).
Ahora coloque el producto de consulta en el mapa, y luego conviértelo en formato JSON y regrese a la recepción, definitivamente habrá un problema de carga perezoso, porque el objeto de la cuenta se tomará durante el proceso de conversión de JSON, pero la sesión se ha cerrado en este momento, por lo que se informará un error. Una solución muy directa pero no muy buena es cambiar el perezoso en la categoría a ansioso, de modo que se pueda encontrar la información de la cuenta, pero esto no es bueno. Por lo tanto, usamos otro método: configure una lista negra en Struts.xml y use expresiones regulares para filtrar la cuenta en categoría al convertirlo en formato JSON, por lo que no verificaremos el objeto de la cuenta, y no habrá problema de carga de la pereza. como sigue:
En este punto, no debería haber ningún problema. Sin embargo, en mi proyecto, todavía reporto excepciones de carga perezosa, lo que significa que no funciona después de configurar de esta manera. Pero teóricamente, después de la configuración, estará bien, y los datos se pueden empaquetar en formato JSON y pasar normalmente a la recepción. Este problema me molestó durante dos días, por lo que simplemente cambié perezoso a ansioso y comencé a hacer el proyecto.
¡Hoy contacté a la excepción aquí en otra excepción de hibernación y la resolví! Hoy en Hibernate, quiero llamar al método Get para obtener la información del producto, pero no puedo obtenerla. No hay ningún mensaje en la consola de fondo. Como encendí el modo de desarrollo, la recepción mostró el mensaje de error:
java.lang.classcastException: cn.it.shop.model.product _ $$ _ javassist_0 no se puede lanzar a javassist.util.proxy.proxy </span>
¿No se puede convertir a un proxy? ? ¿Por qué cambiar a un agente? En general, ¿no se pueden convertir los agentes en objetos reales? Así que busqué en Internet y descubrí que este problema puede deberse a un paquete Javassist Jar en el proyecto que entra en conflicto. Fui al proyecto para verlo, y resultó ser cierto:
Realmente entra en conflicto ... así que solo elimino el Javassist-3.11.0.ga.jar en el paquete Struts. Hibernate es correcto y puede obtener la información del producto normalmente. Luego recordé el problema de Struts2 cambiando a JSON hace 2 días, así que volví a cambiar ansiosamente a Lazy. El problema había desaparecido y también podría convertirme a JSON normalmente. Estaba deprimido. Realmente fue causado por el conflicto entre los paquetes JAR. Porque no había error en ese momento, pero no pude encontrar los datos JSON devueltos en la recepción. Solo sabía que los datos de JSON no se devolvieron. Debe ser un problema con la transferencia de fondo a JSON. Según la experiencia existente, el 90% era una carga perezosa, pero no esperaba que fuera causada por el conflicto del paquete JAR.
Más adelante: si el paquete jar no entra en conflicto pero no puede convertir JSON, es básicamente un problema causado por la carga perezosa. El método de filtrar objetos de carga perezosa al configurar listas negras en Struts.xml es muy práctico. No es necesario modificar la configuración en POJO. Transferiré qué campos quiero transferir a JSON, y si no quiero, es muy conveniente.
Enlace original: http://blog.csdn.net/eson_15/article/details/51394302
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.