Estou usando Spring JPA para acesso ao banco de dados. Consigo encontrar exemplos como findByName e countByName, para os quais não preciso escrever nenhuma implementação de método. Espero encontrar exemplos para excluir um grupo de registros com base em alguma condição.
O Spring JPA suporta exclusão semelhante a deleteByName? Qualquer ponteiro é apreciado.
Atenciosamente e obrigado.
spring
spring-data
spring-data-jpa
curioso1
fonte
fonte
DELETE FROM x WHERE id = ?1 or parent_id = ?1
. Btw, certifique-se de que você não tem um tipo emparent__id
(você tem um traço baixo duplo intencionalmente?). Por que você usa uma opção de consulta nativa?A derivação de consultas de exclusão usando o nome do método fornecido é suportada a partir da versão 1.6.0.RC1 do Spring Data JPA. As palavras
remove
- chave edelete
são suportadas. Como valor de retorno pode-se escolher entre o número ou uma lista de entidades removidas.fonte
Se você der uma olhada no código-fonte do Spring Data JPA, e particularmente na
PartTreeJpaQuery
classe, verá que ele tenta instanciarPartTree
. Dentro dessa classe, a seguinte expressão regularprivate static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
deve indicar o que é permitido e o que não é.
Obviamente, se você tentar adicionar tal método, verá que ele não funciona e obterá o rastreamento de pilha completo.
Devo observar que estava usando a versão
1.5.0.RELEASE
do Spring Data JPAfonte
2 maneiras: -
1ª consulta personalizada
2ª consulta JPA por método
Quando você vai com consulta por método (2ª via), ele primeiro fará uma chamada get
Então ele irá carregá-lo em uma lista Então irá chamar delete id um por um
Primeiro busque a lista de objetos e, em seguida, o loop para excluir o id um por um
Mas, a 1ª opção (consulta personalizada),
É apenas uma única consulta que excluirá onde quer que o valor exista.
Acesse também este link https://www.baeldung.com/spring-data-jpa-deleteby
fonte
Se você usar métodos de exclusão predefinidos conforme fornecidos diretamente pelo spring JPA, as duas consultas abaixo serão executadas pela estrutura.
Primeiro, colete dados (como id e outra coluna) usando by execute select query com delete query where cláusula.
então, após obter o conjunto de resultados da primeira consulta, as consultas de exclusão da segunda serão executadas para todos os ids (um por um)
Nota: Esta forma não é otimizada para seu aplicativo porque muitas consultas serão executadas para uma única consulta de exclusão MYSQL.
Esta é outra maneira otimizada de excluir o código de consulta porque apenas uma consulta de exclusão será executada usando os métodos personalizados abaixo.
fonte
Tenha cuidado ao usar consulta derivada para exclusão de lote. Não é o que você espera: DeleteExecution
fonte
Sim, o método deleteBy é compatível. Para usá-lo, você precisa anotar o método com @Transactional
fonte