在 spring jpa doc 中,该示例显示了一种通过 Length(field) 等 sql 函数进行排序的方法。
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.lastname like ?1%")
List<User> findByAndSort(String lastname, Sort sort);
@Query("select u.id, LENGTH(u.firstname) as fn_len from User u where u.lastname like ?1%")
List<Object[]> findByAsArrayAndSort(String lastname, Sort sort);
}
repo.findByAndSort("targaryen", JpaSort.unsafe("LENGTH(firstname)"));
Run Code Online (Sandbox Code Playgroud)
所以我尝试在postgres中对json字段进行排序,代码就像
@Query("select u from User u where u.loginName like ?1%")
List<User> findByAndSort(String loginName, Sort sort);
repo.findAllAndSort("jack", JpaSort.unsafe("extra ->> 'info'"));
Run Code Online (Sandbox Code Playgroud)
extra 是 postgres 中字段的名称,它是一个 jsonb 类型。
不幸的是,它返回错误:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: > …Run Code Online (Sandbox Code Playgroud)