基于传入请求的带有动态 where 子句的 Spring Data JPA 查询

Spring Data JPA query with dynamic where clause based on incoming request

提问人:wheelerlc64 提问时间:10/3/2023 更新时间:10/3/2023 访问量:9

问:

我有一种情况,我需要能够有一个包含两列(vNum、vName)的响应,并且在请求中,我可以期望传递 v_num 或 v_name(必须是其中之一),并且还可以在请求中发送可选参数(ownerId 或 rpNum)。下面是我想要作为结果集返回的查询:

select RMV.v_num,v_name
from rp.RP RP
inner join rp.rp_mp_v rmv on RP.rp_num = rmv.rp_num
where replace(owner_id,' ','') = '${ownerId}' --(ownerId string from request which is optional)
and (cast(rmv.v_num as varchar(10)) like '%vNum%' --(int from  request) 
or cast(Rmv.v_name as varchar(10)) like '%vName%'  --(string from  request) )
and RP.rp_number = ${rpNum}; -- (rpNum which is an optional int in request)

我的请求 DTO 如下所示:

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RpVendorRequest {

    private Integer vNum;
    private String vName;
    private Integer rpNum;
    private String ownerId;
}

我想为此创建一个存储库,我可以在其中检查传入请求中这些可选参数的 null/not null。如何使用 spring data jpa 实现这一点?修改查询以进行这些 null/not null 检查或在请求本身中是否有意义?我对此有点陌生,所以我不确定该往哪个方向走。任何建议都会有所帮助。谢谢。

spring-data-jpa 可选参数 java-17 动态查询

评论


答: 暂无答案