Spring存储库pagerequest orderby由多列的字符串组合

时间:2017-06-22 12:44:15

标签: java spring spring-data spring-data-jpa

我试图通过将PageRequest传递给findAll()方法从spring数据存储库中检索对象。我的问题是我想让对象按多列的组合字符串排序。

假设我有一个名为Customer的对象,其字段为fname,sname。这些是我们的条目:

fname    |    sname    |
------------------------    
Peter    |    Parker   |
Bruce    |    Wayne    |
         |   Magneto   |             
         |  Wolverine  |

作为排序输出,我希望订单为:

  1. 布鲁斯韦恩
  2. Peter Parker
  3. 金刚狼
  4. 我试过了:

    List<Sort.Order> orders = new ArrayList<>();
    orders.add(new Sort.Order(Sort.Direction.ASC, "fname"));
    orders.add(new Sort.Order(Sort.Direction.ASC, "sname"));
    PageRequest pageRequest = new PageRequest(page, size, new Sort(orders));
    
    Page<Customer> customers = repository.findAll(pageRequest);
    

    但我得到的顺序是:

    1. 金刚狼
    2. 布鲁斯韦恩
    3. Peter Parker
    4. 因为Magneto和Wolverine的fname是空的,而B之前是Bruce的。

2 个答案:

答案 0 :(得分:1)

你不能使用spring数据顺序,因为你应该使用空值并按2列排序,但你可以使用@Query spring data

对它进行排序
string returnQuery = "INSERT INTO Users (LastName, FirstName, IsActive, UserPassword)" + "VALUES(" + "'" + "@LastName" + "', '" + "@FirstName" + "', @IsActive" + ",'" + "@UserPassword" + "')";

答案 1 :(得分:1)

@sbjavateam是正确的,因为您无法提供自定义查询。但我认为您要使用的查询是

select c from Customer c order by CONCAT (c,firstName, ' ', c.lastName)