我有以下实体类,其中objectId是包含字母和数字的字符串。
现在,当我使用Specification和Pageable对象执行查询时,可以像这样进行。
我希望能够根据CaseInfo.objectId进行数字排序,以便在SQL查询中的排序方式看起来类似于:
@Data
@Entity
@Table(name = "CASE_INFO")
public class CaseInfo {
@Id
@Column(name = "ID")
private UUID id;
@Column(name = "OBJECT_ID")
private String objectId;
}
我还有以下仓库
@Repository
public interface CaseInfoRepository extends JpaRepository<CaseInfo, UUID>, JpaSpecificationExecutor<CaseInfo> { }
现在,当我使用Specification和Pageable对象执行查询时,可以像这样进行。
Specification<CaseInfo> specification = (Specification<CaseInfo>) (root, query, criteriaBuilder) -> criteriaBuilder.and();
Pageable pageable = PageRequest.of(0, 25, Sort.by("objectId"));
caseInfoRepository.findAll(specification, pageable);
我希望能够根据CaseInfo.objectId进行数字排序,以便在SQL查询中的排序方式看起来类似于:
... order by to_number(OBJECT_ID) ...
如果我做类似于以下的操作
PageRequest.of(0, 25, Sort.by("objectId"))
我希望它可以按照我的使用情况正确排序,而不是字母顺序,因为 "100" 在 "2" 之前。
我在 https://www.baeldung.com/spring-data-jpa-query 上找到了一个使用的例子。
JpaSort.unsafe("LENGTH(name)")
但这似乎行不通,因为如果我这样做
PageRequest.of(0, 25, JpaSort.unsafe("to_number(objectId)"))
它会显示错误信息“没有找到CaseInfo的属性!你想说‘id’吗?”
有人知道如何给Sort对象自定义表达式吗?