Pregunta

Estoy tratando de encontrar la manera de ejecutar un mayor delete en una relación @ManyToOne, hasta ahora sin éxito.

Escenario:

padre tiene muchas descargas, quiero ejecutar un borrado de todas las descargas en que la fecha de los padres es > :some_date. No quiero eliminar cualquiera de los registros primarios, sólo los registros de descargas. Descarga tiene un campo de nivel superior que se asigna mediante una anotación de @ManyToOne.

Estoy tratando de utilizar un @NamedQuery en la entidad Descargar para lograr esto.

//this OQL tries to delete from both the child and parent tables
//I only want to delete from the Download table
DELETE FROM Download dwn 
    WHERE dwn.acctId = :acctId AND dwn.parent.date > :date

//this OQL is invalid and will keep the bean from deploying
//The example I found used this sub query but with a @OneToMany relationship
//instead of a @ManyToOne relationship
//this is what i get for an error on deployment:
//"Errors in named queries: deleteByAccountIdAndDownloadedDate"
DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p from dwn.parent WHERE p.date > :date) 
    AND dwn.acctId = :acctId

¿Alguna sugerencia?

¿Fue útil?

Solución 2

Yo era capaz de conseguir la mayor borrar a trabajar por quitarse la anotación @ManyToOne y reemplazarla con sólo el largo parentId. Luego cambié los sub seleccionar para utilizar el nombre de Padres en lugar del campo.

Ahora el NCO se parece a esto:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parentId and p.date > :date)

Yo no lo probé (porque no necesito capacidades de consulta de lo que estoy haciendo) pero si puede trabajar para salir de la @ManyToOne de la existencia y el uso de este NCO:

DELETE FROM Download dwn WHERE EXISTS 
    (SELECT p FROM Parent p WHERE p.id = dwn.parent.id and p.date > :date)

Otros consejos

Me se pegaba a la primera aproximación. ¿Hay algún mensaje de error que se muestra?

Cuando se trata de registros primarios que se eliminan junto con las descargas ... ¿Seguro que no tiene una cascada sobre la relación entre ellos?

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