Buscar un cambio de comportamiento en la estrategia de cascada JPA

Esta regla marca los proyectos JPA que definen entidades JPA con relaciones utilizando una estrategia de cascada PERSIST, MERGE o ALL, para que sea consciente de un cambio de comportamiento predeterminado en la implementación de JPA 2.0 en WebSphere Application Server V8.5 y Liberty. Antes de la versión 8.5, cuando había una persistencia en cascada, se comprobaba la base de datos para ver si la entidad existía previamente. El nuevo comportamiento predeterminado es no comprobar primero, y generar una excepción de persistencia "La clave de entidad ya existe" si la entidad ya está en la base de datos. La ventaja del cambio de comportamiento es mejorar el rendimiento al evitar viajes adicionales a la base de datos.

No se espera que este cambio de comportamiento afecte a la mayoría de las aplicaciones. Para aprovechar el nuevo comportamiento, puede probar primero la aplicación en el entorno de la versión 8.5 antes de realizar cambios de código o volver a un comportamiento anterior.

Si experimenta problemas, o si sabe que la aplicación está escrita para esperar que la operación de persistencia busque primero nuevas entidades en la base de datos y no puede manejar la nueva excepción de persistencia, puede volver al comportamiento anterior estableciendo la propiedad openjpa.Compatibility en el archivo persistence.xml:

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

La propiedad también puede establecerse como una propiedad del sistema JVM del servidor si no desea cambiar la aplicación.

Existe una regla Java y una regla XML asociada con este posible problema de aplicación para que sea más fácil de reconocer. Sólo se marcará un resultado por proyecto, aunque la persistencia de cascada se haya definido en varios lugares. Esto permite evaluar este problema en la aplicación en conjunto.

En concreto, debe evaluar las llamadas a las operaciones de EntityManager persist y merge para determinar si el código podrá manejar el cambio de comportamiento correctamente. Después de evaluar la aplicación, puede desactivar esta regla en la configuración de análisis o ignorar los resultados generados.

La regla Java marcará alguna de las siguientes estrategias de cascada definidas en una anotación de relación:

Por ejemplo, los tipos de cascada se marcarán en las anotaciones de relación como @OneToOne.

@Entity
public class Foo {
private Bar bar;

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

La regla XML marcará alguna de las siguientes estrategias de cascada definidas para una entidad en un archivo orm.xml:

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

Si ve alguno de estos elementos marcados, debe evaluar el código que invoca merge o persist en una entidad utilizando un estilo cascada de persistencia o fusión. Si el código de aplicación espera que se compruebe primero la base de datos antes de insertar una nueva entidad, la aplicación puede experimentar un cambio de comportamiento.

Si añade la propiedad openjpa.Compatibility a persistence.xml, ejecute el análisis de nuevo para asegurarse de que no tiene nuevos resultados en la regla Buscar un cambio de comportamiento en la generación de código de JPA MetaModel relativa a ListAttribute relacionada.

Para obtener más información,