Używam Spring JPA do dostępu do bazy danych. Potrafię znaleźć przykłady takie jak findByName i countByName, dla których nie muszę pisać żadnej implementacji metody. Mam nadzieję, że znajdę przykłady usunięcia grupy rekordów na podstawie jakiegoś warunku.
Czy Spring JPA obsługuje usuwanie typu deleteByName? Każdy wskaźnik jest doceniany.
Pozdrawiam i dziękuję.
spring
spring-data
spring-data-jpa
ciekawy 1
źródło
źródło
DELETE FROM x WHERE id = ?1 or parent_id = ?1
. Przy okazji, upewnij się, że nie masz typuparent__id
(czy celowo masz podwójny niski myślnik?). Dlaczego jednak używasz natywnej opcji zapytania?Wyprowadzanie zapytań usuwających przy użyciu podanej nazwy metody jest obsługiwane począwszy od wersji 1.6.0.RC1 Spring Data JPA. Słowa kluczowe
remove
idelete
są obsługiwane. Jako wartość zwracaną można wybrać liczbę lub listę usuniętych jednostek.źródło
Jeśli spojrzysz na kod źródłowy Spring Data JPA, a szczególnie na
PartTreeJpaQuery
klasę, zobaczysz, że próbuje on utworzyć instancjęPartTree
. Wewnątrz tej klasy następujące wyrażenie regularneprivate static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
powinien wskazywać, co jest dozwolone, a co nie.
Oczywiście, jeśli spróbujesz dodać taką metodę, zobaczysz, że to nie działa i otrzymasz pełny ślad stosu.
Powinienem zauważyć, że korzystałem z wersji
1.5.0.RELEASE
Spring Data JPAźródło
2 drogi:-
Pierwsze zapytanie niestandardowe
2. jedno zapytanie JPA według metody
Kiedy przejdziesz z zapytaniem metodą (drugi sposób), najpierw wykona wywołanie get
Następnie załaduje go na listę, a następnie wywoła delete id jeden po drugim
Najpierw pobierz listę obiektów, a potem pętla do usuwania identyfikatorów jeden po drugim
Ale pierwsza opcja (zapytanie niestandardowe),
To tylko jedno zapytanie. Zostanie usunięte wszędzie tam, gdzie istnieje wartość.
Przejdź również przez ten link https://www.baeldung.com/spring-data-jpa-deleteby
źródło
Jeśli użyjesz predefiniowanych metod usuwania, które są bezpośrednio dostarczane przez Spring JPA, wówczas poniższe dwa zapytania zostaną wykonane przez framework.
Najpierw zbierz dane (takie jak id i inne kolumny), używając przez wykonanie zapytania wybierającego z klauzulą delete query where.
następnie po uzyskaniu wyniku Zestaw pierwszego zapytania, drugie zapytania usuwające zostaną wykonane dla wszystkich identyfikatorów (jeden po drugim)
Uwaga: nie jest to zoptymalizowany sposób dla twojej aplikacji, ponieważ wiele zapytań zostanie wykonanych dla pojedynczego zapytania usuwającego MYSQL.
Jest to kolejny zoptymalizowany sposób usuwania kodu zapytania, ponieważ tylko jedno zapytanie usuwające zostanie wykonane przy użyciu poniższych metod niestandardowych.
źródło
Zachowaj ostrożność podczas używania zapytania pochodnego do usuwania wsadowego. To nie jest to, czego oczekujesz: DeleteExecution
źródło
Tak, metoda deleteBy jest obsługiwana.Aby jej użyć, należy oznaczyć metodę adnotacją @Transactional
źródło