Diese Regel markiert JPA-Projekte, die JPA-Entitäten mit Beziehungen definieren, die die Kaskadierungsstrategie PERSIST, MERGE oder ALL verwenden, um Sie auf eine Änderung des Standardverhaltens in WebSphere Application Server Version 8.5 und Liberty aufmerksam zu machen. Vor Version 8.5 wurde bei der Einstellung "cascade persist" geprüft, ob die Datenbank die Entität bereits enthält. Das neue Standardverhalten besteht darin, nicht zuerst zu prüfen und eine Persistenzausnahmebedingung „Entitätsschlüssel bereits vorhanden“ auszulösen, wenn die Entität bereits in der Datenbank vorhanden ist. Der Vorteil dieser Verhaltensänderung ist eine Leistungsverbesserung, weil zusätzliche Aufrufe an die Datenbank vermieden werden.
Diese Verhaltensänderung wirkt sich wahrscheinlich auf die meisten Anwendungen nicht aus. Um den Vorteil des neuen Verhaltens zu nutzen, können Sie die Anwendung zuerst in der Umgebung der Version 8.5 testen, bevor Sie Codeänderungen vornehmen oder zum vorherigen Verhalten zurückkehren.
Wenn Probleme auftreten oder wenn Sie wissen, dass Ihre Anwendung laut Codierung erwartet, dass die
Operation persist zuerst in der Datenbank nach neuen Einträgen sucht und die neue mögliche Persistenzausnahme nicht behandelt,
können Sie die Anwendung auf das vorherige Verhalten zurücksetzen, indem Sie
die Eigenschaft openjpa.Compatibility in der Datei persistence.xml setzen:
Die Eigenschaft kann auch als JVM-Systemeigenschaft des Servers gesetzt werden, wenn Sie die Anwendung nicht ändern möchten.
Es gibt eine Java-Regel und eine zugehörige XML-Regel für dieses potenzielle Anwendungsproblem, um Ihre Aufmerksamkeit zu erhöhen. Es wird nur ein einziges Ergebnis pro Projekt markiert, selbst wenn cascade persist an mehreren Stellen definiert ist. Dies gibt Ihnen die Möglichkeit, Ihre gesamte Anwendung auf dieses Problem hin zu untersuchen.
Insbesondere sollten Sie Aufrufe der EntityManager-Operationen
persist und merge überprüfen, um festzustellen, ob dieser Code die Verhaltensänderung ordnungsgemäß
behandelt.
Nach der Überprüfung Ihrer Anwendung können Sie diese Regel in Ihrer
Analysekonfiguration inaktivieren oder die generierten Ergebnisse ignorieren.
Die Java-Regel markiert jede der folgenden Kaskadierungsstrategien, die in einer Beziehungsannotation definiert sind:
Die Kaskadierungstypen werden beispielsweise in Beziehungsannotationen wie
@OneToOne markiert.
Die XML-Regel markiert jede der folgenden Kaskadierungsstrategien, die für eine Entität in einer Datei orm.xml definiert sind:
Wenn Sie eines dieser Elemente markiert sehen, sollten Sie den Code überprüfen, der
merge oder persist für eine Entität aufruft, die
den Kaskadierungsstil persist oder merge verwendet. Wenn der Anwendungscode erwartet, dass die
Datenbank vor dem Einfügen einer neuen Entität zuerst geprüft wird, könnte in der Anwendung eine Verhaltensänderung auftreten.
Wenn Sie der Datei persistence.xml die Eigenschaft openjpa.Compatibility hinzufügen, führen Sie die Analyse
erneut durch, um sicherzustellen, dass Sie keine neuen Ergebnisse für die zugehörige Regel
Prüfen, ob sich das Verhalten bei der Generierung des JPA-MetaModel-Code in Bezug auf ListAttribute geändert hat haben.
Weitere Informationen: