Un objeto diferente con el mismo valor identificador ya estaba asociado a la sesión: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, de entidad: XXX
He encontrado este error dos veces en total y nunca he encontrado una buena solución, y este error ocurrió
La razón probablemente sea bien conocida, porque en hibernación hay dos logotipos idénticos en la misma sesión
Sin embargo, si es una entidad diferente, este error se reportará al ejecutar la operación saveOrUpdate(objeto).
Jeje, quizá digas que no hay diferencia entre lo que dices y lo que no dices, lo admito, jeje, no sé los detalles
Por qué ocurrió este error, de lo contrario no se habría solucionado en mucho tiempo, ahora, pon uno temporal
La solución es dar a personas como yo, que no tienen forma de encontrar la causa raíz, una forma de seguir implementando
(Por supuesto que es correcto, pero no empieza por la causa) De hecho, es muy sencillo resolver este problema, solo hay que realizar la operación session.clean()
Pero realizaste la operación saveOrUpdate(objeto) después de la operación limpia, lo cual es posible
"Encontré dos representaciones de la misma colección", busqué mucha información.
No hay una buena explicación, y este artículo es la que más ayuda
http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。
Finalmente, puede resolverse mediante el método session.refresh(object), hay que tener en cuenta que cuando el objeto no lo está
Si es un objeto con datos en la base de datos, no puedes usar el factor session.refresh(object)
Para refrescar es recuperar el objeto de la sesión de hibernación, si no hay ningún objeto en la sesión
Si existe este objeto, se reportará un error, así que debes juzgar antes de usar saveOrUpdate(objeto).
Rompelo
Por supuesto, la solución más sencilla a este problema es usar la fusion() que viene con Hibernate.
método. Sin embargo, siempre siento que cuando me encuentro con problemas, utilizo el método muy útil que viene con este software
(comparado con saveOrUpdate(), save(), update()) resulta muy desagradable. Más tarde también descubrí que este error suele aparecer en mapeos uno a muchos y muchos a muchos, por favor estate aquí
Ten cuidado al usar mapeos de uno a muchos y muchos a muchos Resolución de problemas y manejo de Hibernate 1、un objeto diferente con el mismo valor identificador ya estaba asociado a la sesión。 Razón de error: En hibernación, hay dos identidades idénticas en la misma sesión, pero entidades diferentes. Solución temporal 1: session.clean() PD: Si realizas operaciones para cambiar el estado de los datos, como saveOrUpdate(objeto), después de la operación limpia, puedes recibir una excepción de "Se han encontrado dos representaciones de la misma colección". Solución alternativa 2: session.refresh(object) PD: Cuando el objeto no es un objeto con datos en la base de datos, no puedes usar session.refresh(object) porque el método es recuperar el objeto desde la sesión de hibernación; si no hay ningún objeto en la sesión, se reportará un error, así que debes juzgar antes de usar saveOrUpdate(object). Solución 3: session.merge(object) PD: Se recomienda el método propio de Hibernate. 2、Encontrado dos representaciones de la misma colección Causa del error: Véase 1. Solución alternativa: session.merge(object) Las dos anomalías anteriores suelen aparecer en mapeos de uno a muchos y de muchos a muchos
Causas del error:
Mito:No puedes crear un nuevo objeto de usuario y luego obtener la información de usuario basada en el ID de usuario y asignarla a ese objeto, ¡de modo que un objeto diferente con el mismo valor de identificador ya estuviera asociado con el error de sesión!
|