Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring数据JPA中的排序表达式_Java_Spring Data Jpa - Fatal编程技术网

Java spring数据JPA中的排序表达式

Java spring数据JPA中的排序表达式,java,spring-data-jpa,Java,Spring Data Jpa,我有以下实体类,其中objectId是字母数字字符串 @Data @Entity @Table(name = "CASE_INFO") public class CaseInfo { @Id @Column(name = "ID") private UUID id; @Column(name = "OBJECT_ID") private String objectId; } 我还有以下存储库 @Repositor

我有以下实体类,其中objectId是字母数字字符串

@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> { }
如果我做了类似的事情

PageRequest.of(0, 25, Sort.by("objectId"))
它按字母顺序排列,所以“100”在“2”之前,这对于我的用例来说是错误的

我找到了它的用途

JpaSort.unsafe("LENGTH(name)")
但这似乎不起作用,因为如果我这样做

PageRequest.of(0, 25, JpaSort.unsafe("to_number(objectId)"))
它给出错误消息“找不到类型CaseInfo的属性!您是说'id'?”


有人知道给排序对象指定自定义表达式的方法吗?

您可以添加一个将字符串值转换为数字值的公式字段,然后按此字段排序,或者使用默认实现
findAll(Pageable Pageable)

@数据
@实体
@表(name=“案例信息”)
公共类案例信息{
@身份证
@列(name=“ID”)
私有UUID;
@列(name=“OBJECT\u ID”)
私有字符串objectId;
@公式(value=“CAST(对象ID为数字(10,0)))
私有整数映射;
}
存储库:

@存储库
公共接口CaseInfoRepository扩展
JpaRepository,JpaSpecificationExecutor{
//按公式字段排序
列表FindAllByerByNumObjectId(可分页);
}
有一个--当强制转换为
INT
INTEGER
BIGINT
时,它很可能失败,但当强制转换为
数值(10,0)
时,它会起作用


Numeric
也应足够大,以便在强制转换后在字符串中包含值,否则可能会发生整数溢出。

请包括实际使用情况。这是什么意思?显示代码,说明您正在使用的内容,但由于某些原因,该内容不起作用。记住也要包括这些“原因”……我知道这不是你问题的答案,但将objectId设置为长而不是字符串是否更简单?我相信,即使你可以在更高的层中找到某种解决方案,但数据没有索引以便在数据层中排序。演出会很糟糕。
JpaSort.unsafe("LENGTH(name)")
PageRequest.of(0, 25, JpaSort.unsafe("to_number(objectId)"))