Ellenőrizze a JPA átfedő stratégia viselkedési változásait

Ez a szabály azokat a JPA törekvéseket jelöli meg, amelyek PERSIST, MERGE vagy ALL kaszkádolási stratégiát használó viszonyokkal rendelkező JPA entitásokat határoznak meg, hogy a felhasználó tudatában legyen az alapértelmezett JPA viselkedés viselkedés megváltozásának 2.0 a WebSphere Application Server V8.5 és Liberty változatban. A 8.5 változat előtt, tárolás kaszkádolásakor a rendszer ellenőrizte az adatbázisban, hogy létezik-e már az entitás. Az új alapértelmezett viselkedés, hogy ne történjen előzetes ellenőrzés és hibaüzenet az "Entitás kulcsa már létezik" perzisztencia kivétellel, ha az entitás már szerepel az adatbázisban. A viselkedésváltozás előnye, hogy fokozza a teljesítményt, elkerülve az extra adatbázis-eléréseket.

Ez a viselkedésváltozás a legtöbb alkalmazást várhatóan nem érinti. Az új viselkedés előnyeinek kiaknázása érdekében először próbálja ki az alkalmazást a 8.5 verziószámú környezetben, mielőtt módosítaná a kódot vagy visszaállna a korábbi viselkedésre.

Ha problémákat tapasztal vagy tudja, hogy alkalmazását úgy írták meg, hogy azt várja, hogy a tárolási művelet először nézzen utána az új entitásoknak az adatbázisban és ne kezelje az új (lehetséges) tárolási kivételt, akkor visszaállhat az előző viselkedésre a openjpa.Compatibility tulajdonság beállításával a persistence.xml fájlban:

< span class="Code"> < perzisztencia-egység név="name " tranzakciótípus = "JTA ">
...
Tulajdonság= "indent2"> < /span> < properties>
<property name="openjpa.Compatibility" value="checkDatabaseForCascadePersistToDetachedEntity=true"/>
</properties>
</persistence-unit>

Ha nem kívánja módosítani az alkalmazást, akkor beállíthatja a tulajdonságot JVM rendszertulajdonságként is.

Létezik az ehhez a potenciális alkalmazás problémához kapcsolódó Java szabály és XML szabály is, amely felhívja a figyelmet a problémára. Törekvésenként csak egy eredmény lesz megjelölve még akkor is, ha több helyen van kaszkád tárolás meghatározva. Ez lehetőséget ad rá, hogy a teljes alkalmazást kiértékelje ezen probléma tekintetében.

Különösen fontos persist és merge EntityManager műveletek hívásainak kiértékelése annak megállapításához, hogy az adott kód megfelelően fogja-e kezelni a viselkedésváltozást. Az alkalmazás kiértékelése után kikapcsolhatja ezt a szabályt az elemzési konfigurációban vagy figyelmen kívül hagyhatja az előállított eredményeket.

A Java szabály a viszony annotációkban meghatározott alábbi kaszkád stratégiákat jelöli meg:

Például a megjelöli a rendszer a viszony annotációkban található kaszkádtípusokat (például @OneToOne).

@Entity
public class Foo {
private Bar bar;

@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
public Bar getBar() {
return bar;
}
}

Az XML megjelöli az orm.xml fájlban található entitásokhoz meghatározott alábbi kaszkád stratégiákat:

< span class="Code"> Entitás class= "com.ibm.entities.Foo" access="FIELD ">
< átívelő osztály= "indent2"> < /span> < attribútum>
< átívelő osztály= "indent4"> < /span> < egy-egy-név=" bar">
<cascade><cascade-persist/><cascade-merge/></cascade>
</one-to-one>
</attributes>
</entity>

Ha ezen elemek bármelyikét látja megjelölve, akkor ki kell értékelnie a kódot, amely a merge vagy persist metódust használja persist vagy merge kaszkád stílusú entitáson. Ha az alkalmazás azt várja, hogy új entitás beillesztése előtt először az adatbázis ellenőrzésre kerül, az alkalmazás viselkedésváltozást tapasztalhat.

Ha hozzáadja a openjpa.Compatibility tulajdonságot a persistence.xml fájlhoz, akkor az elemzést újrafuttatva győződjön meg róla, hogy nincsenek új eredményei a kapcsolódó Ellenőrizze a viselkedés változását a ListAttribute elemet érintő JPA MetaModel kódkészítésben szabályban.

További információk: