Ricerca una modifica del comportamento nella strategia a cascata JPA

Questa regola contrassegna i progetti JPA che definiscono le entità JPA con le relazioni utilizzando una strategia a cascata di PERSIST, MERGE o ALL per informare l'utente di una modifica di comportamento predefinita nell'implementazione JPA 2.0 in WebSphere Application Server V8.5 e Liberty. Prima della Versione 8.5, quando veniva eseguito il cascading di persist, veniva effettuato un controllo del database per verificare l'esistenza dell'entità. Il nuovo comportamento predefinito è di non controllare prima, e di generare una eccezione di persistenza "Chiave entità già esistente" se l'entità è già nel database. Il vantaggio della modifica al comportamento è un miglioramento delle prestazioni evitando collegamenti supplementari al database.

La modifica al comportamento non dovrebbe interessare la maggior parte delle applicazioni. Per trarre vantaggio dal nuovo comportamento, è possibile provare l'applicazione nell'ambiente della Versione 8.5 prima di apportare modifiche al codice o ripristinare il comportamento predefinito.

In caso di problemi o se l'applicazione è scritta in modo da prevedere che l'operazione persist esegua prima una ricerca delle nuove entità nel database e non gestisce la nuova possibile eccezione di persistenza, è possibile ripristinare il comportamento precedente impostando la proprietà openjpa.Compatibility in persistence.xml:

< span class="Code"> < persistence - unit name="name " transaction - type = "JTA ">
...
< span class= "indent2"> < /span> < proprietà>
<property name="openjpa.Compatibility" value="checkDatabaseForCascadePersistToDetachedEntity=true"/>
</properties>
</persistence-unit>

La proprietà può anche essere impostata come proprietà di sistema JVM se non si desidera modificare l'applicazione.

Sono disponibili una regola Java ed una regola XML associate a questo potenziale problema dell'applicazione per aumentare la possibilità di rilevazione. Verrà contrassegnato un risultato per progetto anche cascade persist è definita in più punti. Questo fornisce la possibilità di valutare l'intera applicazione per questo problema.

In particolare, è necessario valutare le chiamate alle operazioni EntityManager persist e merge per determinare se tale codice gestisce in modo appropriato la modifica al comportamento. Una volta valutata l'applicazione, è possibile disattivare questa regola nella configurazione dell'analisi oppure ignorare i risultati generati.

La regola Java contrassegna le seguenti strategie a cascata definite in un'annotazione della relazione:

Ad esempio, i tipi di cascata verranno contrassegnati nelle annotazioni della relazione come @OneToOne.

@Entity
public class Foo {
private Bar bar;

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

La regola XML contrassegna le seguenti strategie a cascata definite per un'entità in un file orm.xml:

< span class="Code"> < entity class= "com.ibm.entities.Foo" access="FIELD ">
< span class= "indent2"> < /span> < attributi>
< span class= "indent4"> < /span> < nome uno a uno =" bar">
<cascade><cascade-persist/><cascade-merge/></cascade>
</one-to-one>
</attributes>
</entity>

Se uno di tali elementi è contrassegnato, è necessario valutare il codice che richiama merge o persist su un'entità che utilizza uno stile a cascata persist o merge. Se il codice dell'applicazione prevede che venga eseguito il controllo del database prima di inserire una nuova entità, nell'applicazione potrebbe verificarsi una modifica del comportamento.

Se si aggiunge la proprietà openjpa.Compatibility a persistence.xml, eseguire nuovamente l'analisi per verificare di non ottenere nuovi risultati nella regola Ricerca una modifica del comportamento nella generazione del codice JPA MetaModel relativo a ListAttribute correlata.

Per ulteriori informazioni,