Verificaţi modificarea de comportament în generarea codului JPA MetaModel privind ListAttribute

Această regulă semnalează fişierele persistence.xml, pentru a avertiza utilizatorul cu privire la o modificare de comportament în OpenJPA pentru codul generat cu ListAttribute.

Dacă migraţi o aplicaţie care nu utilizează specificaţia JPA 2.0, nu vă veţi confrunta cu această problemă. Dacă aplicaţia dumneavoastră nu utilizează API-ul Criteria sau API-ul Metamodel din specificaţia JPA 2.0, nu vă veţi confrunta cu această problemă.

Aplicaţiile care pot fi afectate de această modificare sunt cele care utilizează direct interfaţa API-ului JPA Criteria sigur pentru tipuri sau API-ul JPA Metamodel. Reţineţi că API-ul Metamodel a fost introdus ca parte a specificaţiei JPA 2.0. Există două versiuni de WebSphere care includ specificaţia JPA 2.0, care expun problema descrisă anterior. Acestea sunt:

WebSphere v8.5 utilizează şi livrează OpenJPA 2.2.0. În ediţiile anterioare (vedeţi paragraful precedent) implementarea OpenJPA MetaModel genera un ListAttribute pentru fiecare matrice. Acest comportament este corect dacă matricea este stocată ca PersistentCollection, dar nu este corect pentru matricele neadnotate (de ex. byte [], char []). În OpenJPA 2.2.0 acest comportament a fost corectat astfel încât matricele care nu sunt stocate ca PersistentCollections vor folosi un SingularAttribute în loc de un ListAttribute.

Pentru a menţine compatibilitatea înapoi, pot fi setate o proprietate şi valoare în fişierul persistence.xml. Mai exact, pentru a utiliza codul care nu a fost regenerat puteți seta <property name="openjpa.Compatibility" value="UseListAttributeForArrays=true"/> în persistence.xml . Dacă mediul dumneavoastră de aplicaţii vă regenerează codul metamodel, nu vă veţi confrunta cu această problemă şi nu este necesar să folosiţi această proprietate. Noul cod regenerat va avea declaraţia corectă. Însă dacă aplicaţia dumneavoastră nu regenerează codul metamodel, aşa cum se poate întâmpla atunci când se realizează o migrare de binar, puteţi folosi această proprietate pentru a permite ca vechiul cod generat să fie utilizat cu noul runtime.

Pentru a ajuta la menţinerea compatibilităţii înapoi, în timpul transformării configuraţiei va fi setată proprietatea de sistem UseListAttributeForArrays=true. Însă proprietatea de sistem pentru OpenJPA este ignorată dacă aplicaţia o are deja setată. Această regulă notifică utilizatorul când setarea proprietăţii de sistem UseListAttributeForArrays va fi ignorată, deoarece nu poate înlocui o setare openjpa.Compatibility existentă în fişierul persistence.xml.

Această regulă se va semnala fişierele persistence.xml când:

Atunci când soluția automată pentru această regulă va fi disponibilă, aceasta va modifica UseListAttributeForArrays valoare în openjpa.Compatibility proprietate astfel încât valoarea va conține value="UseListAttributeForArrays=true" .

Acţiunea recomandată este una dintre următoarele.

Pentru informații suplimentare, vedeți