Toto pravidlo označí projekty JPA, které definují entity JPA se vztahy používající strategii kaskády PERSIST, MERGE, nebo ALL, abyste věděli o změně výchozího chování v implementaci JPA 2.0 v produktu WebSphere Application Server V8.5 a Liberty. Před verzí 8.5 byla provedena kontrola databáze, zda entita již existuje, a to v případě, že se jedná o kaskádu. Nové výchozí chování je neprovádět nejprve kontrolu a generovat výjimku perzistence "Klíč entity již existuje" , je-li entita již v databázi. Výhodou změny chování je zvýšení výkonu, protože se zabrání nadbytečné komunikaci s databází.
U této změny chování se neočekává, že bude mít vliv na většinu aplikací. Chcete-li využít nové chování, můžete nejprve vyzkoušet aplikaci v prostředí verze 8.5 a teprve poté provést změny kódu nebo se vrátit k předchozímu chování.
Pokud se vyskytnou problémy nebo pokud víte, že vaše aplikace je napsána tak, aby očekávala operaci persist pro první pohled do databáze na nové entity a neošetřuje novou možnou výjimkou perzistence, můžete vrátit předchozí chování nastavením vlastnosti openjpa.Compatibility v souboru persistence.xml:
Tuto vlastnost lze nastavit také jako systémovou vlastnost JVM serveru, pokud nechcete aplikaci změnit.
K dispozici je pravidlo Java a pravidlo XML přidružené k tomuto potenciálnímu problému aplikace, které vám pomohou zvýšit informovanost. Každý projekt bude mít označen pouze jeden výsledek, a to i v případě, že je perzistence kaskády definována na více místech. To vám dává možnost vyhodnotit celou aplikaci v rámci tohoto problému.
Zejména byste měli vyhodnotit volání operací EntityManager persist a merge, abyste určili, zda tento kód bude správně zacházet se změnou chování.
Po vyhodnocení vaší žádosti můžete toto pravidlo vypnout buď ve svém konfiguraci analýzy, nebo ignorovat generované výsledky.
Pravidlo Java označí libovolnou z následujících strategií kaskády definovaných v anotaci vztahu:
Například typy kaskády budou označeny v anotacích vztahu, jako např. @OneToOne.
Pravidlo XML označí libovolnou z následujících strategií kaskády definovaných pro entitu v souboru orm.xml:
Pokud se zobrazí kterákoli z těchto označených položek, měli byste vyhodnotit kód, který volá merge nebo persist v entitě pomocí kaskádového stylu typu persist nebo merge. Pokud kód aplikace očekává, že databáze bude před vložením nové entity nejprve zkontrolována, může aplikace dojít ke změně chování.
Pokud přidáte vlastnost openjpa.Compatibility do souboru persistence.xml, spusťte analýzu znovu a ujistěte se, že nemáte nové výsledky související s pravidlem Zkontrolovat změnu chování v generování kódu JPA MetaModel týkajícím se ListAttribute.
Další informace