Java spring数据JPA中的排序表达式
我有以下实体类,其中objectId是字母数字字符串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
@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)"))