Marcel Overdijk
Marcel Overdijk

Reputation: 11467

Change default sort order for Spring Data findAll() method

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?

Upvotes: 25

Views: 59969

Answers (4)

Mithun
Mithun

Reputation: 8067

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

Upvotes: 38

Mewan
Mewan

Reputation: 39

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

Upvotes: -1

Matthias
Matthias

Reputation: 51

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

Upvotes: 3

Alan Hay
Alan Hay

Reputation: 23226

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

Upvotes: 7

Related Questions