Order by with name starts with condition

Order by with name starts with condition

我正在使用 spring 引导规范并尝试按名称对一组结果进行排序,以便以“ca”开头的名称排在第一位。查询看起来像 -

order by name like 'ca%' desc

我用过密码

cq.orderBy(cb.desc(cb.like(root.get("name"), value + "%")));

然而,我陷入了一个错误

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: like near

我不知道如何修复您的 Criteria 代码,但如果您愿意通过 JPA 存储库界面中的 @Query 注释使用命名查询,那么您可以尝试使用 case表达式:

order by case when name like 'ca%' then 0 else 1 end

完整代码:

@Query("select ... from Entity e order by case when e.name like 'ca%' then 0 else 1 end")
public List<Entity> getEntities();

想通了。我所要做的就是添加这两行代码

Expression<Object> queryCase = cb.selectCase().when(cb.like(root.get(NAME), value + "%"), 0).otherwise(1);
cq.orderBy(cb.asc(queryCase));