2016-04-06 3 views
1

Ich habe den folgenden Code erhalten:Wie Set.size() innerhalb eines @Query mit CrudRepository

@Query("SELECT t FROM Track t JOIN t.artists a WHERE a IN (:artists) GROUP BY t HAVING COUNT(t) = 2") 
public Track findByArtistIgnoreCase(@Param("artists") Set<Artist> artists); 

Es arbeitet mit einem festen Wert für die COUNT (wie 2), aber ich brauche zu ersetzen, Mit artists.size() wird nur der Track mit allen Künstlern des Sets zurückgegeben (Track & Artist hat eine @ManyToMany-Beziehung).

Die einzige Möglichkeit, es zum Laufen zu bringen, besteht darin, ein anderes @Param zu übergeben, das die Größe des Sets wäre, aber das scheint kontraproduktiv zu sein, wenn ich das Objekt selbst passiere.

Gibt es eine Möglichkeit, die Größe dieses Set-Parameters in der Abfrage abzurufen oder direkt in SQL abzurufen (die in() -Objekte zählen)?

Antwort

0

Ich weiß nicht, warum Sie denken, es ist kontraproduktiv. Sie müssen es immer noch berechnen, so dass Sie einfach eine weitere @Param übergeben können.

Meiner Meinung nach ist es einfach einfacher, so zu gehen, ohne Zeit mit nicht so wichtigem Problem zu verschwenden.

+0

Ja, ich denke, ich muss mit dieser Route gehen. Nur eine Korrektur: Ich denke, dass CrudRepository nur Long als Parameter für count akzeptiert, also new Long (artists.size()) ist eine andere Sache, die ich jedes Mal tun muss, wenn ich diese Methode nenne ... – Henkes

Verwandte Themen