当前位置: 首页 > 知识库问答 >
问题:

如何对JPA查询结果进行排序,其中参数是字符串,结果是对象列表?

白飞飙
2023-03-14

我正在编写一个Spring Boot APIendpoint,我需要返回一个航空公司列表,该列表按3个或更多字符的字符串(描述)排序,列表的结果必须与顶部单词开头的字符串相匹配,其余的按字母顺序排序

@Getter
@Setter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "airline")
public class Airline implements Serializable {
    private static final long serialVersionUID = -5962418077659300886L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    @Column
    private String code;

    @Column
    private String description;
}

我得到了与字符串匹配的列表,但我无法获得正确的顺序

public interface AirlineRepository extends JpaRepository<Airline, Integer> {
    Airline getById(Integer id);

    List<Airline> findByDescriptionContainingIgnoreCase(String description, Pageable pageable);
    List<Airline> findByDescriptionStartsWithIgnoreCase(String description, Pageable pageable);
}

如果我搜索关键词“ala”,所有以“ala”开头的航空公司都应该排在第一位。

这就是我得到的

{
  "status": "SUCCESS",
  "message": "Execution Successful",
  "totalCount": 10,
  "content": [
    {
      "id": 962,
      "code": "6T",
      "description": "Air Mandalay"
    },
    {
      "id": 46,
      "code": "NZ",
      "description": "Air New Zealand"
    },
    {
      "id": 18,
      "code": "AS",
      "description": "Alaska Airlines"
    },
    {
      "id": 519,
      "code": "KO",
      "description": "Alaska Central Express"
    },
    {
      "id": 477,
      "code": "J5",
      "description": "Alaska Seaplane"
    },
    {
      "id": 30,
      "code": "YZ",
      "description": "ALAS URUGUAY"
    },
    {
      "id": 324,
      "code": "C9",
      "description": "Alphaland Aviation"
    },
    {
      "id": 286,
      "code": "A7",
      "description": "Calafia Airlines"
    },
    {
      "id": 330,
      "code": "CE",
      "description": "Chalair"
    },
    {
      "id": 521,
      "code": "L3",
      "description": "DHL de Guatemala"
    }
  ],
  "timestamp": null
}````

共有3个答案

甄正信
2023-03-14

我不太确定我是否完全理解你的要求。

为了以有序的方式获取所有航空公司,我会将以下方法添加到AirlineRepository中

List<Airline> findByDescriptionStartsWithIgnoreCaseOrderByDescriptionAsc(String description, Pageable pageable);

如果你还需要其他航空公司,我也会添加这种方法。

List<Airline> findByDescriptionNotLikeIgnoreCaseOrderByDescriptionAsc(String description, Pageable pageable);

向描述中添加'%',并合并两个列表。

步建茗
2023-03-14

传递description作为排序符号,并创建pageRequest如下所示。

PageRequest pageRequest = PageRequest
                .of((int) Math.ceil((float) (start / pageDataSize)), pageDataSize, Sort.by('description').ascending());


List<Airline> findByDescriptionStartsWith(String description, Pageable pageable);
桓喜
2023-03-14

你可以使用这样的东西:

@Query("select * from Airline a order by substring(a.description, 0,search_text_length)")
List<Airline> findAirline();

你可以在这里得到一个想法

 类似资料:
  • 我正在使用Sqlite-pcl从数据库中检索一些数据。当显示结果时,有一个作为整数(等级)返回的某个字段,代表奖杯等级。我想用取决于值的字符串值替换该字段,例如,如果值为0,我想要结果为“铂金”,如果值为1,则值应为“银”。当然,数据库中没有这样的表来保存这些等级的描述,因此我不能使用联接

  • 主要内容:单字段排序,多字段排序通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。 在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格进行排序;在医院的挂号系统中,可以按照挂号的先后顺序进行排序等。 ORDER BY 关键字主要用来将查询结果中

  • 我目前有一个查询,它使用MongoTemplate的findAll()方法返回集合中的所有文档。我想对这些结果进行排序,但看不到任何方法。我看到我可以使用find()和一个查询参数并调用。with(Sort Sort),但是在这个场景中,我如何设置查询以返回所有文档?我会同意使用任何一种方法。

  • 问题内容: 正在搜寻 这不起作用....我到处搜索并阅读了文档。但是我只是看不到如何根据他们的“所有者”关系名称对我的(基础)查询进行排序。 它总是导致: 这一定很容易…但是我看不到。还研究了比较器,这似乎合乎逻辑,但是我看不到ORDER BY的查询部分在哪里生成或我应该返回什么,因为所有内容都是动态生成的。为每个“玩家”关系做一个比较器来做一件简单的事情似乎过于复杂。 问题答案: SQLAlch

  • 这是我的密码。我做错了什么?我想在RecyclerView中显示降序结果。

  • 问题内容: 我在使用Elasticsearch查询时遇到问题。我希望能够对结果进行排序,但是elasticsearch忽略了排序标签。这是我的查询: 但是,当我删除查询部分并仅发送排序标签时,它就可以工作。谁能指出正确的方法? 我还尝试了以下查询,这是我所拥有的完整查询: 设定值 对应 提前致谢! 问题答案: 文档中的 “标题” 字段是一个 分析的 字符串字段,也是一个多值字段,这意味着Elast