Как написать запрос в JpaRepository, где в качестве параметра метода используется список?
Имеется приложение на Hibernate, Spring Data Jpa. В приложении есть некоторая сущность с полем id:
@Entity
@Table(name = "entities_table")
public class Entity {
@Id
public Integer id;
}
У меня есть множество id: Set<Integer> ids. Я хочу передать это множество в параметры метода JpaRepository и вытащить сразу все сущности, id которых имеется в множестве. Я хочу сделать что-то такое:
@Transactional(readOnly = true)
public interface EntityDao extends JpaRepository<Entity, Integer> {
@Query("SELECT e FROM Entity e WHERE e.id IN :ids")
Set<Entity> getAllById(Set<Integer> ids);
}
Как мне правильно составить запрос?
Ответы (1 шт):
Во-первых есть вариант от @Roman Konoval:
@Transactional(readOnly = true)
public interface EntityDao extends JpaRepository<Entity, Integer> {
@Query("SELECT e FROM Entity e WHERE e.id IN (:ids)")
Set<Entity> getAllById(Set<Integer> ids);
}
В данном случае надо просто обернуть :ids в скобки.
Имеется и второй вариант. Он основан на механизме Spring Data JPA, который распознаёт название метода в JpaRepository и автоматически составляет запрос. Например, вот это:
@Query("SELECT e FROM Entity e WHERE e.id=:id")
Entity get(Integer id);
легко заменяется на это:
Entity getById(Integer id);
На самом деле вариантов использования этого механизма довольно много, их можно посмотреть вот здесь. Конкретно в моём случае можно сделать вот так:
Set<Entity> findByIdIn(Set<Integer> ids);