Change default sort order for Spring Data findAll() method

后端 未结 4 1335
一整个雨季
一整个雨季 2020-12-15 18:25

I\'m using Spring Data JPA and I wonder if it is possible to change the default sort order for a entity being used by the Spring Data findAll() method?

相关标签:
4条回答
  • 2020-12-15 18:46

    You can achieve this as follows:

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

    Another way to achieve the same. Use the below method name:

    findByOrderByIdAsc()
    
    0 讨论(0)
  • 2020-12-15 18:58

    If you want to add costom query to findAll() jpa query you can do it this way

    here i changed my default order

    According to my default order is primary key it is id

    but now i here set id_order to change my default order

    Model class

    @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;
    

    Repository class

    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();
    
    0 讨论(0)
  • 2020-12-15 19:04

    You should be able to do this by either:

    in spring-data 1.5+, overriding the findAll() method in your Interface, adding the @Query annotation and creating a named Query in your Entity class like, for example, below:

    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();
    }
    

    or,

    by creating a custom repository implementation:

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

    0 讨论(0)
  • 2020-12-15 19:10

    Use a PagingAndSortingRepository instead. With that in place you can add a queryparameter ?sort=,

    Repository:

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

    GET Request:

    localhost:8080/users?sort=name,desc
    
    0 讨论(0)
提交回复
热议问题