Ho un'entità che contiene altre due entità con relazione @ManyToOne.Hibernate e NonUniqueObjectException
@Entity
public class A extends Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
@Cascade(CascadeType.SAVE_UPDATE)
private B b;
@ManyToOne
@Cascade(CascadeType.SAVE_UPDATE)
private C c;
}
se provo a salvare un Un'istanza che hanno "B_ID" e "C_ID" di un altro record ottengo l'eccezione:
org.hibernate.NonUniqueObjectException: un oggetto diverso con lo stesso valore identificativo è stato già associato alla sessione
Ad esempio:
A table
| ID | B_ID | C_ID |
| 1 | 1 | null | // this works
| 2 | null | 1 | // this works
| 3 | 1 | x | // this throws the exception
| 4 | x | 1 | // this throws the exception
x=any value of existent B/C_ID
B_ID e C_ID non sono univoci nel mio modello e (B_ID + C_ID) non è un vincolo univoco !!
Cosa posso fare?
Grazie in anticipo.
Grazie, le uniche cose che carico da db sono B e C, e le uso in un oggetto. Ma B e C hanno CascadeType.SAVE_UPDATE, quindi non vengono salvati di nuovo, ma solo aggiornamento ... spero ... – blow
Anche i problemi si presentano all'inizio, quando la sessione è nuova. – blow
rimuovere le direttive a cascata funziona bene, ma ... PERCHE '??? Senza "Cascade.SAVE_UPDATE" l'ibernazione dovrebbe provare a ri-salvare "A" e "B" che sono già presenti in db e quindi lanciare un'eccezione, ma invece funziona ... perché? – blow