Dobry den,
toto je vlastnost JPA. V kazdem obousmernem (bidirectional) vztahu se
rozlisuji dve strany: owning side a inverse size. Inverse side se
definuje pomoci mappedBy. Pro ukladani vztahu do databaze se pouziva
pouze owning side. Tj. ulozi se to, co je v promenne categoryItem.
Jinak je dobrym zvykem hlidat konzistenci vztahu. Tj. pokud nastavite
v nejake CategoryItem odkaz na Page, mel byste i v Page nastavit odkaz
na danou CategoryItem tak, aby vztah byl skutecne bidirectional.
Z.T.
--
Zdenek Tronicek
Department of Computer Science and Engineering
Prague tel: +420 2 2435 7410
http://cs.felk.cvut.cz/~tronicek
Quoting [EMAIL PROTECTED]:
Ahoj konference
Používám JPA s Hibernate.
Mám 2 entyty: Page a CategoryItem v asociaci OneToOne
@Entity
public class Page {
@OneToOne(cascade={CascadeType.ALL})
@JoinColumn(name="idCategoryItem", unique=true, nullable=true,
updatable=true)
private CategoryItem categoryItem;
...
@Entity
public class CategoryItem {
@OneToOne(mappedBy="categoryItem")
private Page page;
...
---------------------------------------------------------------
Pokud provedu nějakou CRUD operace s Page změny se projeví i u CategoryItem.
Ale pokud provedu nějakou CRUD operace s CategoryItem změny se u
Page neprojeví.
Když potom načítám Page vyhodí mi to vyjímku.
Konkrétně:
Page page = service.find(1);
CategoryItem item = service.find(1);
service.remove(item);
page = service.find(1); //Vyhodí EntityNotFound pro CategoryItem#1
-------------------------------------------------------
Pokud se podívám do Db, tak v tabulce CategoryItem je záznam s id1 smazaný,
ale v tabulce Page má sloupec idCategoryItem stále hodnotu id#1
Děkuji za radu
Tomáš Jurman