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 az alkalmazás azt várja,
hogy a perzisztencia művelet
először keressen új entitásokat az adatbázisban, és ne kezelje az új lehetséges
perzisztencia kivételt, akkor visszatérhet az előző viselkedéshez
az openjpa beállításával.Összeegyezhetőség tulajdonság a persistence.xml fájlban:
|
<persistence-unit name="name" transaction-type="JTA"> ... <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:
|
<entity class="com.ibm.entities.Foo" access="FIELD"> <attributes> <one-to-one name="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.Összeegyezhetőség tulajdonság
Persistence.xml, futtassa újra az elemzést, hogy ne legyen új eredmény a kapcsolódó
Ellenőrizze a JPA MetaModel kódelőállítás viselkedési változását a ListAttribute elemmel kapcsolatban szabály.
További információk: