public class RedeemCodeQuery {
private String code;
private RedeemCode.CodeStatus status;
private String exportStatus;
public static enum CodeStatus {
INIT,USED
}
public static enum ExportStatus {
DEFAULT,EXPORTED
}
//getter setter...
}
String sqlByQuery = """
select rc from RedeemCode rc
where (:#{#query.code} is null or rc.code = :#{#query.code} )
and ( :status is null or rc.status = :status )
and ( :#{#query.exportStatus} is null or rc.exportStatus = :#{#query.exportStatus} )
""";
@Query(sqlByQuery)
Page<RedeemCode> pageBy(@Param("query") RedeemCodeQuery query, @Param("status") CodeStatus status, Pageable pageable);
{#query.code}:工作时,代码类型为String,位于RedeemCodeQuery类内部;
rc.status =:status:工作,状态是枚举类型。
rc.exportStatus =:#{#query.exportStatus}:错误,exportStatus是枚举类型,并且在RedeemCodeQuery类中。
Spring SpEL可能会将:#{#query.exportStatus}更改为其他类型。可以将枚举放在类中作为查询参数吗?如何做到这一点?
1条答案
按热度按时间lokaqttq1#
这里有两个选项:
1.或者使用
Enum.name()
获取rc.exportStatus
字段的String
表示,以与String
rc.exportStatus
参数进行比较:1.或者使用特殊的
T()
operator和Enum.valueOf()
将String
rc.exportStatus
字段转换为ExportStatus
枚举的成员:1.或者使用肮脏的黑客:SpEL表达式
#query.exportStatus
假设exportStatus
字段有一个getter,所以你可以修改它以返回ExportStatus
而不是String
,保持你的初始查询:这将在运行时为您提供给予理想的类型。