Hibernate: Cómo hacer que Hibernate eliminar registros de tabla secundaria cuando se eliminan los padres si el niño está vinculado a los padres con muchos-a-uno?

StackOverflow https://stackoverflow.com/questions/360026

Pregunta

Digamos que tengo dos mesas - "niño" y "padre" con muchos-a-uno respecto. Lo que necesito es eliminar entradas secundarias si se elimina registro padre.

No es un problema si enlazo tabla secundaria de los padres mediante la creación de uno-a-muchos en asociación parent.hbm y ajuste en cascada = "all-delete-orphan".

El problema es que no quiero relación uno-a-muchos en el lado de los padres, por lo que creó muchos-a-uno en el lado del niño. La razón de ello es tabla secundaria es bastante grande y no quiero para extraer cientos de registros cada vez que utilizo padres. Así que mi configuración es el siguiente:

child.hbm:

<many-to-one name="parent" class="com.example.Parent" column="parentid"/>

mientras parent.hbm tiene ninguna asociación con el niño.

La pregunta es:? ¿Cómo hacer Hibernate eliminar registros de tabla secundaria cuando se elimina uno de los padres si un niño está vinculado a un padre con muchos-a-uno

Gracias.

¿Fue útil?

Solución

Un par de opciones:

  • añadir uno-a-muchos de los padres con la eliminación en cascada, pero mitigar la pérdida de rendimiento utilizando la carga diferida.

  • Hibernate Interceptor (o un aspecto en un entorno AOP) para detectar deleciones registro padre y borrar los niños.

En lo personal yo estaría a favor de la primera opción, ya que le permite a su modelo de datos reflejan más estrechamente las relaciones reales en sus datos.

Editar:. hay una tercera opción, pero no es agradable - utilizar un trigger, y limpiar su caché Hibernate (o usar una sesión no caching)

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