SpEL Spring Exp,我知道我们可以只使用连接运算符+
,这样常量就可以被计算。
@Query(value = "UPDATE kdo set is_revise=0, update_by="
+ Constant.CREATOR+ ", update_time= CURRENT_TIMESTAMP where kdo.id=:kdoId", nativeQuery = true)
int flagRevised(String kdoId);
字符串
但我很好奇,它可以使用Spring表达式语言完成。不知何故已经演示了here。但在我的情况下,我想使用常量,我的方法只需要1个参数。
1条答案
按热度按时间pu3pd22g1#
答案很简单:许多
SpEL
表达式不支持nativeQuery
。如果放弃
nativeQuery
而使用JPQL
,则可以在查询中添加SpEL表达式而不是常量,如下所示:..., update_by=:#{T(x.y.z.Constant).CREATOR}, ...
个OR
个..., update_by=?#{T(x.y.z.Constant).CREATOR}, ...
个如果你不能给予
nativeQuery
,但使用(或可以使用)Spring Data JPA
晚于3.0.0
,你可以使用QueryRewriter
。查询重写器:
有时候,无论你尝试应用多少特性,似乎都不可能让Spring Data JPA在将查询发送到AlternityManager之前将你想要的所有东西应用到查询中。
有了3.0.0-SNAPSHOT(并针对Spring Data的下一个里程碑发布系列),您现在可以在将其发送到AlternityManager之前获得查询并“重写”它。也就是说,您可以在最后一刻进行任何更改。
我们可以让查询通过
SpelExpressionParser
,这样QueryRewriter
就可以识别SpEL
语句。(不同的问题可能需要TemplateParserContext
或更多的代码改进。)让我们创建
SpELQueryRewriter
类:字符串
让我们为
Constant.CREATOR
常量添加SpEL
表达式和qqq类:型
您的查询将如下所示:
型