Abfrage nach booleschen Eigenschaften in spring-data-jpa ohne Verwendung von Methodenparametern

Lesezeit: 3 Minuten

Ist es möglich, in Spring Data JPA nach booleschen Eigenschaften abzufragen, ohne Methodenparameter zu verwenden?

Grundsätzlich möchte ich, dass dies ohne die Verwendung einer benutzerdefinierten @Query-Annotation funktioniert:

@Query("SELECT c FROM Entity c WHERE c.enabled = true")
public Iterable<Entity> findAllEnabled();

Benutzer-Avatar
Orangenziege

Das JPA-Repository-Abschnitt Die Abfrageerstellung hat die folgenden Methoden.

True    findByActiveTrue()  … where x.active = true
False   findByActiveFalse() … where x.active = false

Meine Vermutung wäre zu verwenden

@Query
public Iterable<Entity> findByEnabledTrue();

  • Danke, @orangegoat, aber bist du sicher, dass es funktioniert? Wurde es in einer späteren Spring Data-Version eingeführt? Ich verwende 1.0.1 und erhalte eine Ausnahme: Fehler beim Erstellen einer Bean mit dem Namen „entityRepository“: FactoryBean hat eine Ausnahme bei der Objekterstellung ausgelöst; Die verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Keine Eigenschaft true für den Typ boolean gefunden

    – Mike Minicki

    11. Juli 2013 um 22:56 Uhr


  • Nun, es wurde in Version 1.1.0.RC1 (2012-02-03) eingeführt: “Unterstützung für Wahr/Falsch als Suchschlüsselwörter (DATAJPA-132)”. Als akzeptiert markieren, obwohl ich nicht testen kann, ob es funktioniert.

    – Mike Minicki

    11. Juli 2013 um 23:21 Uhr


  • Ich denke, das funktioniert, wenn Sie es in der Datenbank als wahr/falsch speichern. Wenn Sie es als ‘Y’/’N’ speichern, erzeugt dieses Ergebnis, wo x = 1, und schlägt fehl, wenn String mit Int verglichen wird. Ich musste es so verwenden: findByX (boolean enabled), um die richtige Abfrage zu erhalten. Ich bin mir nicht sicher, warum die Übersetzung im ersten Fall nicht wie erwartet erfolgt.

    – Wadim Kiriltschuk

    18. September 2019 um 1:39 Uhr

Benutzer-Avatar
megalucio

Das @Query Anmerkungen können sogar übersprungen werden. Also sollte es einfach so funktionieren:

public Iterable<Entity> findByEnabledTrue();

  • @Abfrage überspringen? Nicht wirklich, was ist mit dem Abrufen nur bestimmter Felder? Mit Ihrem Code rufen Sie alle Felder der Entität aus der Datenbank ab, was möglicherweise nicht das ist, was Sie wollen. Trotzdem füge ich eine weitere Version Ihrer Methode hinzu: public Iterable findByEnabledIsTrue(); beachten Sie das Is oder public Iterable findByEnabled(boolean done); dann übergeben Sie einen booleschen Wert als Argument

    – Melardew

    17. Juni 2019 um 15:28 Uhr


  • Sie können die @Query-Annotation in der Tat überspringen, da Spring dies nur per Konvention auf der Grundlage des Namens der Methode ableiten wird. Wenn Sie jedoch nur bestimmte Felder möchten, müssen Sie wahrscheinlich eine Abfrage erstellen, aber ich sehe nicht, was das ist Mehrwert davon, und dann ab Ihrer Methode findByEnabled, dass dies wiederum nicht der Sinn dieser Frage ist, wie im Titel dieser Frage klar angegeben ist: “Abfrage von booleschen Eigenschaften in spring-data-jpa ohne Verwendung von Methodenparametern”.

    – megalucio

    17. Juni 2019 um 17:19 Uhr

  • Ja, ich weiß, dass er nach einer Lösung gefragt hat, ohne @Query zu verwenden, aber Sie sagten über das Überspringen der Query-Anmerkung. Ich wollte nur sicherstellen, dass die Leute, die Ihre Antworten lesen, die Konsequenzen davon bemerken. Abfragemethoden können gefährlich sein, wenn Sie eine Entität mit vielen haben Felder oder/und Felder, die viel Speicher beanspruchen (z. B. große Zeichenfolgen). Also nein, man kann nicht einfach so überspringen

    – Melardew

    17. Juni 2019 um 17:42 Uhr

1175230cookie-checkAbfrage nach booleschen Eigenschaften in spring-data-jpa ohne Verwendung von Methodenparametern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy