Witam.
Na początek kilka słów wyjasnien.
A mianowicie mam w bazie m.in. 2 tabelki:
Klient i Adres polączone relacja jeden-do-wielu. I odwzorowane sa w beanach encyjnych:
Klient
...
@OneToMany( fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "klient" )
private Set<Adres> adres;
...
oraz
Adres
...
@ManyToOne @JoinColumn( name = "KLIENT_ID", referencedColumnName = "KLIENT_ID", insertable = false, updatable = false )
private Klient klient= null;
...
I teraz tak. Bean Kient ma metody:
public Set<Adres> adres getAdres(){
return adres;
}
public void setAdres( Set<Adres> adres){
this.adres= adres;
}
I teraz przechodze do sedna :)
Dlaczego cos takiego:
Klient kl....
Set<Adres> zbior = new HashSet<Adres>();
Adres ad1 = new Adres();
ad1.set...*
Adres ad2 = new Adres();
ad2.set...
zbior.add( ad1 );
zbior.add( ad2 );
kl.setAdres(zbior);
*set.. oznacza metody Set() odpowiednich pol. Nie jest tylko ustawiane pole Id gdyz jego generowaniem zajmuje sie odpowiednia sekwencja z bazy danych.
w momencie wywolalnia :
EntityManager em;
em.merge(kl);
Wywala SQL error ze niby jakas wartosc stringowa ma nieodpowiednia dlugosc. Tylko ze jak dany Set ograniczne do jednego z rekorodow ad1 lub ad2 to juz jest ok. Wiec nie ma mowy ze ad1 lub ad2 zawieraja nie takie dane.