Изменить порядок сортировки по умолчанию для метода Spring Data findAll()

Я использую Data JPA, и мне интересно, можно ли изменить порядок сортировки по умолчанию для объекта, используемого методом Spring Data findAll()?

Ответ 1

Вы должны иметь возможность сделать это:

в spring -data 1.5+, переопределяя метод findAll() в вашем интерфейсе, добавив аннотацию @Query и создав именованный запрос в вашем классе Entity, например, ниже:

Объект

@Entity
@NamedQuery(name = "User.findAll", query="select u from User u order by u.address.town")
public class User{

}

Repository

public interface UserRepository extends ... <User, Long> {

    @Override
    @Query
    public Iterable<User> findAll();
}

или,

путем создания пользовательской реализации репозитория:

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

Ответ 2

Вы можете добиться этого следующим образом:

dao.findAll(new Sort(Sort.Direction.DESC, "colName"));
// or
dao.findAll(Sort.by("colName").descending());

Еще один способ добиться того же. Используйте приведенное ниже имя метода:

findByOrderByIdAsc()

Ответ 3

Вместо этого используйте PagingAndSortingRepository. С помощью этого вы можете добавить параметр запроса? Sort =,

Repository:

public interface UserRepository extends PagingAndSortingRepository<User, Long> {
  //no custom code needed
}

Запрос GET:

localhost:8080/users?sort=name,desc

Ответ 4

Если вы хотите добавить запрос costom к запросу findAll() jpa, вы можете сделать это следующим образом

здесь я изменил свой порядок по умолчанию

В соответствии с моим порядком по умолчанию первичный ключ, это идентификатор

но теперь я установил id_order для изменения порядка по умолчанию

Модельный класс

@Entity
@Table(name = "category")
@NamedQuery(name = "Category.findAll", query="select u from Category u order by 
u.id_order")
public class Category {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String nameEn;
private String nameSi;
private String nameTa;
private Integer id_order;

Класс репозитория

import com.model.Category;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface CategoryRepository extends CrudRepository<Category, Integer> {

@Override
@Query
public Iterable<Category> findAll();