Re: JPA - Flush() problém

Pavel Zelenka Zelenka na mediaservis.cz
Úterý Červen 3 10:39:26 CEST 2008


kod te metody je nasledovny:

public String ulozKomentar() {
        em = emf.createEntityManager();
        em.merge(clanek);
        em.refresh(clanek);
        em.getTransaction().begin();
        clanek.getKomentareCollection().add(newKomentar);
        newKomentar.setIdclanek(clanek);
        em.flush();
        em.getTransaction().commit();
        em.close();
        newKomentar = new Komentare();
        return "";
    }

Problem ale je, ze em.merge(clanek) nejak asi nefunguje korektne protoze 
to vyhazuje vyjimku:

java.lang.IllegalArgumentException: Can not refresh not managed object: 
nastenka.entity.Clanky[idclanek=2].
 
oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.refresh(EntityManagerImpl.java:381)
        nastenka.NastenkaBean.ulozKomentar(NastenkaBean.java:80)

Pokud ale kod prepisu tak, ze EntityManager necham porad otevreny, tak vse 
funguje jak ma. Proto si myslim, ze problem bude v tom jak pripojit Clanek 
zpet do persistentniho kontextu.



konference-bounces na java.cz wrote on 03.06.2008 10:10:29:

> > v podstate jde o to, jestli metoda ulozKomentar() pouziva spravny 
postup jak
> > pridat a ulozit zaznam do kolekce List<Komentare> komentareCollection 
v
> > instanci (Clanky) clanek
> 
> bez kodu te metody tezko rici, kazdopadne to vypada podle popisu, ze
> ten objekt Clanek je odpojeny od persistentniho kontextu. Takze zkuste
> pred tim, nez vlozite ten komentar, zavolat
> 
> em.refresh(clanek);
> clanek.getKomentareCollection().add(newKomentar);
> newKomentar.setClanek(clanek);
> em.flush();
> 
> to by melo fungovat
> 
> > jj toto pouzivam, jen jsem myslel, jestli by to JPA neumelo nejak 
> "automaticky"
> 
> neznam JPA, ale v Hibernatu se to ridi atributem inverse, ktery urcuje
> toho kdo ridi relaci, jestli strana one a nebo strana many. Elegantni
> reseni je to mit osetrene na urovni domenoveho modelu, aby se clovek
> nemusel podrizovat tomu, ze ve spodu je nejaky ORM framework.
> 
> public class Clanek {
>     public void addComment(Komentar comment) {
>        getKomentareCollection().add(comment);
>        comment.setClanek(this);
>     }
> 
>     .....
> }
> 
> -- 
> S pozdravem Roman "Dagi" Pichlik
> 
> /* http://www.sweb.cz/pichlik/ Blog pro kodery */
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://amaio.cz/pipermail/konference/attachments/20080603/b5de1307/attachment.htm>


Další informace o konferenci Konference