Есть ли способ переопределить запрос findAll, выполняемый Spring Data Rest?@NamedQuery переопределить findAll в Spring Data Rest JpaRepository
Мне нужен способ фильтрации результатов на основе некоторых конкретных критериев, и кажется, что использование @NamedQuery
должно быть в соответствии с тем, что я ищу, поэтому я настраиваю тест.
@Entity
@Table(name = "users")
@NamedQueries({
@NamedQuery(name = "User.findAll", query="SELECT u FROM User u WHERE u.username = 'test'"),
@NamedQuery(name = "User.findNameEqualsTest", query="SELECT u FROM User u WHERE u.username = 'test'")
})
public class User implements Serializable, Identifiable<Long> { }
С этим в месте я бы ожидать SDR использовать мой FindAll() запрос (возвращение 1 результата), но вместо этого он выполняет ту же самую старую FindAll логику (возвращающуюся все результаты).
В моей Repository я добавил:
@Repository
@RestResource(path = "users", rel = "users")
public interface UserJpaRepository extends JpaRepository<User, Long> {
public Page<User> findNameEqualsTest(Pageable pageable);
}
и в этом случае это забрать предоставленный @NamedQuery
. Итак ...
Как я могу переопределить стандартную логику findAll()
? Мне нужно построить сложный набор критериев и применить его к набору результатов.
Выполнено и работает. Несколько раз бил головой о клавиатуру, пока я не осознал важность имен классов в этом процессе. –
Действительно, это очень распространенная проблема, заданная несколько раз в SOverflow, в учебнике должно быть указано примечание – Koitoer
По состоянию на Spring Data JPA 1.5 для выполнения этой задачи больше не потребуется настраиваемая реализация. См. [Мой ответ] (http://stackoverflow.com/a/21751130/18122) для получения дополнительной информации. –