Path: csiph.com!goblin1!goblin3!goblin.stu.neva.ru!news.netfront.net!not-for-mail From: Davide Newsgroups: it.comp.java Subject: Re: JPA detached entity Date: Sat, 26 Mar 2016 20:15:38 +0100 Organization: Netfront http://www.netfront.net/ Lines: 40 Message-ID: References: <0d59bcc5-4860-4218-b339-7f2f17cea807@googlegroups.com> NNTP-Posting-Host: 79.17.189.137 Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-Trace: adenine.netfront.net 1459019663 49570 79.17.189.137 (26 Mar 2016 19:14:23 GMT) X-Complaints-To: news@netfront.net NNTP-Posting-Date: Sat, 26 Mar 2016 19:14:23 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 In-Reply-To: Xref: csiph.com it.comp.java:8893 Il 26/03/2016 19:55, Cicap ha scritto: > Il giorno sabato 26 marzo 2016 15:01:36 UTC, Davide ha scritto: >> Il 26/03/2016 15:11, Cicap ha scritto: >>> Il giorno giovedì 24 marzo 2016 20:18:05 UTC, Davide ha scritto: >>>> Salve, >>>> sto sviluppando un'applicazione java ee che usa jpa, se nel DAO faccio >>>> una cancellazione (metodo remove()) di un'entità detached viene >>>> giustamente generata un'eccezione che indica che l'entità è detached >>>> mentre invece se faccio un'aggiornamento (metodo merge()) di un'entità >>>> detached non viene generata nessuna eccezione e l'aggiornamento va a >>>> buon fine, come mai succede questo? >>> >>> Domanda: cosa pensi che faccia l'operazione "merge" in generale? E da quale fonte ti sei formato quell'idea. >>> >> >> Scusami, per errore ho risposto sulla tua mail. >> >> L'operazione merge credo che faccia un update, la fonte è: >> https://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#merge%28T%29 > > "Merge the state of the given entity into the current persistence context." > > Quindi se un'entity e' detached il metodo merge *ritorna* un'entity managed, quindi sincronizzera' il suo stato con il database. E' il motivo per cui esiste "merge": se hai un'entity detached ci devi fare il "merge" nel persistence context prima di poterci operare (solo se vuoi sincronizzarla verso il db ovviamente). > > Attenzione che merge ritorna un'entity managed, mentre l'entity passata come parametro rimane detached (se era detached). > > Dovresti prima studiarti come minimo il funzionamento di JPA riguardo al lifecycle delle entity, perche' e' evidente che ti mancano i principi basilari. > > Esempio: > > http://www.objectdb.com/java/jpa/persistence/managed > Grazie del chiarimento. Saluti, Davide --- news://freenews.netfront.net/ - complaints: news@netfront.net ---