Această regulă semnalează proiectele JPA care definesc entităţi JPA cu relaţii ce utilizează o strategie de cascadă PERSIST, MERGE sau ALL pentru a vă permite să sesizaţi o modificare de comportament implicit în implementarea JPA 2.0 din WebSphere Application Server V8.5 şi Liberty. Înainte de Versiunea 8.5, când era cascadată o persistenţă, era verificată baza de date pentru a se vedea dacă există deja entitatea. Noul comportament implicit este de a nu mai verifica mai întâi, și de a arunca o excepție de persistență "Cheia de entitate există deja" dacă entitatea este deja în baza de date. Avantajul adus de modificarea de comportament este îmbunătăţirea performanţei prin evitarea accesării suplimentare a bazei de date.
Este de aşteptat ca cele mai multe aplicaţii să nu fie afectate de această modificare de comportament. Pentru a beneficia de noul comportament, puteţi încerca mai întâi aplicaţia în mediul cu Versiunea 8.5 şi după aceea să faceţi modificări de cod sau să reveniţi la comportamentul anterior.
Dacă apar probleme sau dacă ştiţi că aplicaţia dumneavoastră a fost scrisă astfel încât operaţia de persistare să caute mai întâi în
baza de date noile entităţi şi să nu trateze noua posibilă excepţie de persistenţă, puteţi reveni la comportamentul anterior prin
setarea proprietăţii openjpa.Compatibility din persistence.xml:
Proprietatea poate fi setată ca o proprietate de sistem JVM a serverului dacă nu vreţi să modificaţi aplicaţia.
Pentru această posibilă problemă de aplicaţie, există o regulă Java şi o regulă XML, menite să vă atragă atenţia asupra ei. Doar un singur rezultat va fi semnalat pe proiect, chiar dacă este definită cascada persist în mai multe locuri. Aceasta vă oferă posibilitatea să evaluaţi întreaga aplicaţie pentru această problemă.
În particular, ar trebui să evaluaţi apelurile operaţiilor EntityManager persist şi merge, pentru a
determina dacă respectivul cod va trata corect modificarea de comportament.
După ce vă evaluaţi aplicaţia, puteţi să dezactivaţi această regulă în configuraţia dumneavoastră de analiză sau să ignoraţi
rezultatele generate.
Regula Java va semnala oricare dintre următoarele strategii de cascadă definite într-o adnotare de relaţie:
De exemplu, tipurile de cascadă vor fi semnalate în adnotările de relaţie cum ar fi @OneToOne.
Regula XML va semnala oricare dintre următoarele strategii de cascadă definite pentru o entitate într-un fişier orm.xml:
Dacă vedeţi oricare dintre aceste articole semnalate, ar trebui să evaluaţi codul care apelează merge sau
persist pentru o entitate utilizând un stil de cascadă persist sau merge. Dacă codul aplicaţiei se aşteaptă să fie
verificată baza de date înainte de a fi inserată o entitate nouă, aplicaţia s-ar putea confrunta cu o modificare de comportament.
Dacă adăugaţi proprietatea openjpa.Compatibility în persistence.xml, rulaţi din nou
analiza, pentru a vă asigura că nu aveţi rezultate noi pentru regula
Verificaţi modificarea de comportament în generarea codului JPA MetaModel
privind ListAttribute.
Pentru informații suplimentare,