Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 21246|Respuesta: 0

[Fuente] un objeto diferente con el mismo valor identificador ya estaba asociado con...

[Copiar enlace]
Publicado en 1/7/2016 10:48:52 | | | |
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!





Anterior:Uso de dinámica en C# 4.0
Próximo:Clonar la replicación superficial de objetos C#
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com