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));
我正在使用 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));