Mam encję, która zawiera dwie inne jednostki o relacji @ManyToOne.Hibernate i 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;
}
Jeśli próbuję zapisać Instancja że mają "B_ID" i "C_ID" innego rekordu A i uzyskać wyjątek:
org.hibernate.NonUniqueObjectException: inny obiekt z tego samego wartość identyfikator został już powiązany z sesji
na przykład:
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 i C_ID nie są unikalne w moim modelu i (B_ID + C_ID) nie są wyjątkowym ograniczeniem !!
Co mogę zrobić?
Z góry dziękuję.
Dzięki, jedyne rzeczy, które ładuję z db to B i C, i używam ich w obiekcie A. Ale B i C mają CascadeType.SAVE_UPDATE, więc nie są zapisywane ponownie, ale tylko aktualizacja ... mam nadzieję ... – blow
Problemy pojawiają się również na początku, gdy sesja jest nowa. – blow
usuwanie dyrektyw kaskadowych działa dobrze, ale ... DLACZEGO ??? Bez "Cascade.SAVE_UPDATE" hibernacja powinna próbować ponownie ZAPISZ "A" i "B", które są już prezentowane w db, a więc wyrzucić wyjątek, ale działa zamiast ... dlaczego? – blow