2015-07-10 8 views
10

Ich versuche, eine benutzerdefinierte deleteBy-Methode Abfrage in meinem Repository zu erstellen. Es scheint, dass Hibernate eine Auswahlanweisung ausgibt, anstatt zu löschen.Spring Daten jpa deleteBy Abfrage funktioniert nicht

public interface ContactRepository extends JpaRepository<Contact, Integer> { 

    Integer deleteByEmailAddress(String emailAddress); 

    //and this one works 
    Contact findContactByName(String name); 
} 

und hier ist das, was Hibernate versucht zu tun:

Hibernate: wählen contact0_.id als id1_2_, contact0_.emailAddress as> emailAdd2_2_, contact0_.name als name3_2_ von Kontakt contact0_ wo> contact0_ .emailAddress =?

Was fehlt mir? Muss ich eine spezielle Konfiguration vornehmen, damit der Löschvorgang funktioniert?

Antwort

19

Funktioniert das Löschen nicht oder funktioniert nicht wie erwartet? Normalerweise muss eine Entität verwaltet werden, bevor sie gelöscht werden kann. Daher lädt ein JPA-Provider (in Ihrem Fall den Ruhezustand) die Entität zuerst (die angezeigte Abfrage) und gibt dann die Löschung aus.

Wenn Sie nur die Abfrage zu sehen, aber keine entsprechende löschen, dann einige Möglichkeiten sind:

  1. gibt es nichts zu löschen, stellen Sie sicher, dass der Datensatz ist es in der db
  2. die Lösch Bedürfnisse Teil einer Transaktion sein. Ich glaube, die Frühlings-Daten CRUD ops standardmäßig Transaktions sind, wenn nicht nur sicherstellen, dass, was auch immer ruft deleteByEmailAddress Transaktions

Hinweis ist: Sie wählen Sie vermeiden können, wenn eine Entität Entfernen einer modifizierenden Abfrage löschen verwenden, zB unter:

+4

Es funktioniert, nachdem ich die Methode mit @Transactional mit Anmerkungen versehen. Vielen Dank, Sir! Hinweis: Es arbeitete auch mit Query, aber ich wollte nur eine funktionale Methodenabfrage. –

+1

danke über '// HINWEIS: du hast zurück void '- Ich werde alles versucht, aber nicht darüber nachgedacht, es war der Grund in meinem Fall! – yetanothercoder

+0

@iken Query funktioniert gut mit Ändern und transaktionalen Annotation, aber in der Datenbank Zeile ist immer noch – Abhij

4

In modernen Versionen von Spring Data JPA (> = 1.7.x) ist die Abfrageableitung für Lösch-, Lösch- und Zählvorgänge zugänglich.

Spring Data: "delete by" is supported?

+2

Das ist, wo ich angefangen habe, aber es beantwortet nicht meine Frage. –

Verwandte Themen