Haben wir in Spring CrudRepository Unterstützung für "IN-Klausel" für ein Feld? dh etwas Ähnliches wie das Folgende?
findByInventoryIds(List<Long> inventoryIdList)
Wenn eine solche Unterstützung nicht verfügbar ist, welche eleganten Optionen können in Betracht gezogen werden? Das Auslösen von Abfragen für jede ID ist möglicherweise nicht optimal.
findByInventoryIdIn(List<Long> inventoryIdList)
sollte den Trick machen.
Das Format des HTTP-Anforderungsparameters sieht folgendermaßen aus:
Yes ?id=1,2,3
No ?id=1&id=2&id=3
Die vollständige Liste der JPA-Repository-Schlüsselwörter finden Sie im aktuelle Dokumentationsliste . Es zeigt, dass IsIn
äquivalent ist - wenn Sie das Verb für die Lesbarkeit bevorzugen - und dass JPA auch NotIn
und IsNotIn
unterstützt.
Für jede Methode in einem Spring CrudRepository sollten Sie in der Lage sein, die @Query selbst anzugeben. So etwas sollte funktionieren:
@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
Ja, das wird unterstützt.
In der Dokumentation hier finden Sie die unterstützten Schlüsselwörter in Methodennamen.
Sie können die Methode einfach in der Repository-Schnittstelle definieren, ohne die Annotation @ Query zu verwenden und Ihre benutzerdefinierte Abfrage zu schreiben. In Ihrem Fall wäre es wie folgt:
List<Inventory> findByIdIn(List<Long> ids);
Ich gehe davon aus, dass Sie die Entität Inventory und die Schnittstelle InventoryRepository haben. Der Code in Ihrem Fall sollte folgendermaßen aussehen:
Die Entität
@Entity
public class Inventory implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
// other fields
// getters/setters
}
Das Repository
@Repository
@Transactional
public interface InventoryRepository extends PagingAndSortingRepository<Inventory, Long> {
List<Inventory> findByIdIn(List<Long> ids);
}