Pregunta

Estoy tratando de hacer una aplicación que mantiene un modelo de objetos de forma sincronizada con una base de datos mediante la observación de todos los cambios y luego la persistencia de inmediato los objetos en las preguntas. Muchos de los objetos en el modelo tienen niños en las listas grandes o árboles.

Cuando cargo un objeto de la base de datos, que se basan en una relación en cascada de una vía para recuperar también la totalidad de sus hijos e incluirlos en la aplicación.

Sin embargo, es posible alterar un campo en el objeto primario que requiere persistencia y puedo determinar que ninguno de los niños se ven afectados. Así que me gustaría que persista el padre, sin chocar con la base de datos con todos los niños en cascada persiste.

por ejemplo

@Entity
public class Parent {

    @OneToMany(cascade=CascadeType.ALL)
    public List children;

}

¿Cómo puedo reemplazar la opción de cascada cuando persisto un objeto padre? ¿O debo configurarlo para refrescar y asegurarse de que nunca necesito una cascada persisten?

¿Fue útil?

Solución

La lectura de los objetos de la base de datos y la persistencia de ellas se basan en dos anotaciones diferentes.

Cuando se carga un objeto, sino que también obtendrá el otro extremo de las relaciones ansiosos (FetchType.EAGER), según la definición de la propiedad ir a buscar en la relación.

En función de su proveedor de JPA, es posible que tenga opciones para anular este comportamiento. EclipseLink, a través de la QueryHint.BATCH increíblemente útil, sin duda lo hace.

Cuando usted persiste, borrar o actualizar, el tipo cascada es lo que es relevante.

Por lo tanto, perder la cascada, mantenga el traer y problema resuelto.

En lo personal creo en cascada todo es buscar problemas pero las opiniones varían.

Un proveedor JPA decente tendrá un esquema (configurable) de almacenamiento en caché bastante sofisticada ya. Tal vez usted debe estar preguntando por qué estás reinventar la rueda en particular?

¿Es una cuestión de cambios asíncronos puramente para el rendimiento? ¿O es algo más la razón?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top