Básicamente, tengo algunos objetos en esta configuración (el modelo de datos real es un poco más complejo):
- A tiene una relación de muchos a muchos con B. (B tiene
inverse="true") - B tiene una relación de muchos a uno con C. (me he
cascadefijado en"save-update") - C es una especie de tabla de tipo / categoría.
Además, probablemente debería mencionar que las claves primarias son generadas por la base de datos al guardar.
Con mis datos, a veces me encuentro con problemas en los que A tiene un conjunto de diferentes objetos B, y estos objetos B se refieren al mismo objeto C.
Cuando llamo session.saveOrUpdate(myAObject), me sale un error de hibernación diciendo: "a different object with the same identifier value was already associated with the session: C". Sé que Hibernate no puede insertar / actualizar / eliminar el mismo objeto dos veces en la misma sesión, pero ¿hay alguna forma de evitar esto? Esta no parece ser una situación tan poco común.
Durante mi investigación de este problema, he visto a personas sugerir el uso de session.merge(), pero cuando lo hago, cualquier objeto "en conflicto" se inserta en la base de datos como objetos en blanco con todos los valores establecidos en nulos. Claramente eso no es lo que queremos.
[Editar] Otra cosa que olvidé mencionar es que (por razones arquitectónicas fuera de mi control), cada lectura o escritura debe realizarse en una sesión separada.