Estoy usando Spring JPA para acceder a la base de datos. Puedo encontrar ejemplos como findByName y countByName, para los cuales no tengo que escribir ninguna implementación de método. Espero encontrar ejemplos para eliminar un grupo de registros en función de alguna condición.
¿Spring JPA admite la eliminación similar a deleteByName? Se agradece cualquier puntero.
Saludos y gracias.
spring
spring-data
spring-data-jpa
curioso1
fuente
fuente
DELETE FROM x WHERE id = ?1 or parent_id = ?1
. Por cierto, asegúrese de no tener un tipo de entradaparent__id
(¿tiene un guión doble bajo por intención?). Sin embargo, ¿por qué utiliza una opción de consulta nativa?Se admite la derivación de consultas de eliminación utilizando el nombre de método dado a partir de la versión 1.6.0.RC1 de Spring Data JPA. Las palabras clave
remove
ydelete
son compatibles. Como valor de retorno se puede elegir entre el número o una lista de entidades eliminadas.fuente
Si echas un vistazo al código fuente de Spring Data JPA, y particularmente a la
PartTreeJpaQuery
clase, verás que intenta crear una instanciaPartTree
. Dentro de esa clase, la siguiente expresión regularprivate static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
debe indicar qué está permitido y qué no.
Por supuesto, si intenta agregar un método de este tipo, verá que no funciona y obtendrá el seguimiento de pila completo.
Debo señalar que estaba usando mirando la versión
1.5.0.RELEASE
de Spring Data JPAfuente
2 maneras:-
Primera consulta personalizada
2nd one consulta JPA por método
Cuando vaya con la consulta por método (segunda forma), primero hará una llamada get
Luego lo cargará en una Lista Luego llamará a eliminar ID uno por uno
Primero busque la lista de objetos, luego for loop para eliminar la identificación una por una
Pero, la primera opción (consulta personalizada),
Es solo una consulta. Se eliminará donde exista el valor.
Vaya también a través de este enlace https://www.baeldung.com/spring-data-jpa-deleteby
fuente
Si va a utilizar métodos de eliminación predefinidos proporcionados directamente por Spring JPA, el marco ejecutará dos consultas a continuación.
Primero recopile datos (como id y otra columna) usando ejecutando la consulta de selección con la cláusula de eliminación de consulta where.
luego, después de obtener el resultSet de la primera consulta, las segundas consultas de eliminación se ejecutarán para todos los ID (uno por uno)
Nota: Esta no es una forma optimizada para su aplicación porque muchas consultas se ejecutarán para una sola consulta de eliminación de MYSQL.
Esta es otra forma optimizada de eliminar código de consulta porque solo se ejecutará una consulta de eliminación utilizando los métodos personalizados a continuación.
fuente
Tenga cuidado cuando utilice consultas derivadas para la eliminación por lotes. No es lo que esperabas: DeleteExecution
fuente
Sí, se admite el método deleteBy Para usarlo, debe anotar el método con @Transactional
fuente