Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Spring数据findAll()方法的默认排序顺序_Spring_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

更改Spring数据findAll()方法的默认排序顺序

更改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

我使用的是Spring数据JPA,我想知道是否可以更改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()
是的,我知道我可以使用它。但我想知道是否可以为实体设置默认排序。我想不可能。我上面发布的解决方案满足您的需要。它只满足他对单个方法的需求。