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







Odpovedet emailem