Buenas!
Estoy haciendo unas pruebas con Spring y Hibernate y tengo un problema cuando quiero guardar un objecto, os explico.
Tengo la classe CapturePoint que dentro tiene un attributo Point. En la base de datos esto se refleja como 2 tablas con una relacion 1-n, es decir que Point tiene n CapturePoint y CapturePoint tiene 1 Point.
Bueno, cuado hago el save() de un CapturePoint, se me guarda primero el Point y luego se guarda el CapturePoint con el id ya associado que se le ha dado al Point (Cascade.persist).
Hasta aquí todo bien, el problema viene cuando quiero guardar otro CapturePoint que tiene un "nuevo" Point associado (Point tiene una Constraint unique de sus valores "X" e "Y") con los valores "X" e "Y" iguales. Logicamente el programa peta diciendome que no puede crear un nuevo CapturePoint por que no se ha podido guardar su Point debido a que existe uno que cumple dicha constraint.
Así que se me ocurre la solución de modificar el DAO para que cuando detecte que sucede este caso, coja el Point que ya existe en la DB, lo asocie de nuevo al objeto CapturePoint que estoy guardando, y haga un save() de nuevo.
De todos modos, esta solución no me convence nada, por que me hace tener que tocar todos los DAO's de todas las class que tengan problemas similares. Entonces, supongo que debe existir alguna anotación para indicarle a Hibernate, que en caso de que un objeto anidado al objeto del save() ya exista, este no se guarde y asocie el objeto anidado de la classe ha guardar con el que ya existe en la DB.
Bueno espero que se entienda mi duda y si necesitáis mas info pedírmela.
Un saludo!