wake-up-neo.net

Spring JPA Query gibt NULL anstelle von List zurück

Ich habe einen @Entity Video mit einer one-to-many Beziehung mit einem List<Tag> tags als einem seiner Felder. Ich benutze den folgenden @Repository mit Spring Data , um die beliebtesten Tags zu erhalten:

@Repository
public interface TagRepository extends CrudRepository<Tag, Integer>{
    @Query("SELECT t FROM Tag t WHERE (SELECT SUM(v.views) FROM Video v WHERE t MEMBER OF v.tags) > 0")
    public List<Tag> findMostViewedTags(int maxTags);
}

Die Query wird von Spring verarbeitet und als gültig betrachtet. Ich habe die generierteSQLmit meiner Datenbank lokal getestet und gab 2 Tags zurück. In meinem Code erhalte ich jedoch den Wert Null , wenn ich die Methode findMostViewedTags (100) aufrufe.

Die Abfrage-Suchstrategie ist der Standardwert "CREATE_IF_NOT_FOUND".

  1. Wenn keine Ergebnisse gefunden werden, sollte die Methode eine leere Liste zurückgeben oder Null ? Mein gewünschtes Verhalten ist, eine leere Liste zu erhalten.
  2. Warum gibt der Methodenaufruf Null statt eines List<Tag> mit size () 2 zurück?
8
Vjeetje
  1. Das normale Verhalten gibt in der Tat eine leere Liste zurück, wenn keine Ergebnisse gefunden werden. Wenn List<Object> der Rückgabewert der Methode in der definierten Schnittstelle ist, sollte die Methode niemals Null zurückgeben.
  2. Das Problem ist, dass ein Parameter an die Methode übergeben wird und an keiner Stelle in der Query verwendet wird. Aus irgendeinem Grund entscheidet Spring , in diesem Fall ein Null zurückzugeben. Lösung: Entfernen Sie den nicht verwendeten Parameter oder verwenden Sie den Parameter in der Query .
11
Vjeetje

Ich habe ein ähnliches Problem erlebt. Die Ursache war, dass ich Mockito verwendete und die Daten nicht korrekt mit when() verspottet habe.

3
user1747134