2015-03-13 74 views
9

我正在使用Spring Data JPA,并且我想知道是否可以更改Spring Data findAll()方法所使用的实体的默认排序顺序?更改Spring数据的默认排序顺序findAll()方法

+0

您拥有的是JPA查询写。 – 2015-03-13 11:28:39

+0

@Andrei是的,但如果可能,我想避免这种情况。 – 2015-03-13 11:30:42

+0

findAll没有应用任何顺序。如果你想改变这个,你必须扩展'SimpleJpaRepository'并覆盖'findAll'方法。请参阅[将自定义行为添加到所有存储库]一节(http://docs.spring.io/spring-data/jpa/docs/1.7.2.RELEASE/reference/html/#repositories.custom-behaviour-for-全库)。您也可以使用它覆盖默认行为。 – 2015-03-13 12:23:19

回答

2

您应该能够要么做到这一点:

春季数据1.5+

,覆盖在相应接口的findAll()方法,添加注释@Query和在创建实体类像一个命名查询,例如下面:

实体

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

} 

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

19

你可以做到这一点,如下所示:

dao.findAll(new Sort(Sort.Direction.DESC, "<colName>")); 

另一种方式来达到同样的。使用下面的方法名称:

findByOrderByIdAsc() 
+0

是的,这是一个选项。不过,我希望标准findAll()方法使用特定的顺序。原因是我也使用@Cacheable。 – 2015-03-13 11:31:33

+0

你可以试试这个方法的名称 - 'findByOrderByIdAsc()' – Mithun 2015-03-13 11:53:57

+0

是的我明白我可以使用它。但我想知道是否有可能在一般情况下为实体设置默认排序。我猜不会。 – 2015-03-13 13:09:14

0

使用PagingAndSortingRepository代替。 由于在地方,你可以添加一个queryparameter排序=,

库:

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

GET请求:

localhost:8080/users?sort=name,desc