更改Spring数据findAll()方法的默认排序顺序
我使用的是Spring数据JPA,我想知道是否可以更改Spring数据更改Spring数据findAll()方法的默认排序顺序,spring,jpa,spring-data,spring-data-jpa,Spring,Jpa,Spring Data,Spring Data Jpa,我使用的是Spring数据JPA,我想知道是否可以更改Spring数据findAll()方法使用的实体的默认排序顺序?您可以通过以下方式实现: dao.findAll(new Sort(Sort.Direction.DESC, "colName")); // or dao.findAll(Sort.by("colName").descending()); 实现同样目标的另一种方法。使用以下方法名称: findByOrderByIdAsc() 您应该能够通过以下方式实现此目的: 在spring
findAll()
方法使用的实体的默认排序顺序?您可以通过以下方式实现:
dao.findAll(new Sort(Sort.Direction.DESC, "colName"));
// or
dao.findAll(Sort.by("colName").descending());
实现同样目标的另一种方法。使用以下方法名称:
findByOrderByIdAsc()
您应该能够通过以下方式实现此目的: 在spring data 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();
}
公共接口用户存储库扩展。。。{
@凌驾
@质疑
公共可数findAll();
}
或者
通过创建自定义存储库实现:
改用分页和排序存储库。 有了它,您可以添加queryparameter?sort= 存储库:
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
//no custom code needed
}
如果您想将costom查询添加到findAll()jpa查询中,可以这样做 在这里,我更改了默认顺序 根据我的默认顺序是主键,它是id 但是现在我在这里设置id\u顺序来更改我的默认顺序 模型类
@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();
存储库类
@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();
导入com.model.Category;
导入org.springframework.data.jpa.repository.Query;
导入org.springframework.data.repository.crudepository;
导入java.util.List;
公共接口类别repository扩展了crudepository{
@凌驾
@质疑
公共可数findAll();
为此编写您自己的JPA查询。@Andrei是的,但如果可能的话,我希望避免这种情况。findAll没有任何应用的顺序。如果您想更改这种情况,您必须扩展SimpleParepository
并重写findAll
方法。请参阅上的部分。您还可以使用它来重写默认行为。是的这将是一个选项。但是我希望标准findAll()方法使用特定的顺序。原因是我也在它上面使用@Cacheable。请尝试此方法名称-findByOrderByIdAsc()
是的,我知道我可以使用它。但我想知道是否可以为实体设置默认排序。我想不可能。我上面发布的解决方案满足您的需要。它只满足他对单个方法的需求。