[Javalist] TransactionAttributeType.REQUIRES_NEW

Böszörményi Péter zmblevlist at gmail.com
2013. Feb. 3., V, 15:20:18 CET


Ott rontod el, hogy lokalisan hivod a deletePic metodust. Ilyenkor nem  
jatszik a tranzakcios proxy. Az egyik megoldas, hogy beinjektalod a beanbe  
onmagat, es azon a beanen hivod a deletePic metodust.

On Sun, 03 Feb 2013 15:17:45 +0100, Zoltán Bernát <bernatzoltan at gmail.com>  
wrote:

> Sziasztok!
>
> JPA kerdes. Tranzakcio kezeles. A megoldando feladat az lenne, hogy
> tobb entitast toroljek a DB-bol, de olyan modon, hogy ha valamelyik
> torles meghiusul (pl foreign key miatt), attol meg a tobbi torles
> rendben megtortenjen.
> (azaz egy sikertelen torles ne rollback-elje az egesz procedurat)
>
> Ugy gondoltam volna megoldani a dolgot, hogy egy tranzakcioban futo
> metodusbol ciklusban torlom a kepeket egy masik,
> TransactionAttributeType.REQUIRES_NEW tranzakcioban.
>
> A hibajelenseg az, hogy  ha egy torles nem sikerult a deletePic (Pix
> picEntity) metodusban(pl ConstraintViolationException miatt. (ami
> rendben is van)), akkor a metodus kovetkezo hivasanal mar
> TransactionRequiredException kivetel dobodik szinten a  deletePic (Pix
> picEntity) metodusban, es igy az amugy torolheto entitast sem sikerul
> torolni. Azaz ha csak egy entitas is van, amelyik nem torolheto, az
> osszes torlese meghiusul.
>
> Azt gondolom, elvi hibas a megoldasom, meg azt, hogy a
> TransactionAttributeType.REQUIRES_NEW pont ilyen esetekre lett
> kitalalva. Hol benazom el? (Hol ertem felre a
> TransactionAttributeType.REQUIRES_NEW szerepet)?
> Koszi!
>
> @TransactionAttribute(TransactionAttributeType.REQUIRED)
> public List<Integer> deletePix(List<Integer> ids){
>     for(Integer id : ids){
>         ...
>                     if(deletePic(pixBeanEntity)){
>                         ... //sikeres torles
>                     }
>     }
> }
>
>
> @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
>     private boolean deletePic (Pix picEntity){
>         try {
>             em.remove(picEntity); //em az EntitiManager
>             //org.hibernate.exception.ConstraintViolationException, ha
> nem megy a torles a foreign key miatt. Ez az elvart viselkedes.
>             //De: TransactionRequiredException jon akkor is, ha
>             em.flush(); //entitiManager flush
>             // itt tovabbi utasitasok vannak, amikre nem kerul a
> vezerles, ha a fenti flush() kivetelt dobott
>         } catch (Exception e) {
>             context.setRollbackOnly();
>             return false;
>         }
>         return true;
>     }
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist


-- 
Üdvözlettel,
Böszörményi Péter


További információk a(z) Javalist levelezőlistáról