CriteriaBuilder不要粘贴函数参数

时间:2019-09-20 14:27:06

标签: java hibernate

这是我从CriteriaBuilder中获得的休眠查询:

select generatedAlias0 from MyObject as generatedAlias0 where 1=1 order by COLLATION_KEY(lower(generatedAlias0.mycol), :param0) asc

:param0应该被解析为UCA400R1,但是它必须被解析为:param0。问题出在哪里?

cb.function("COLLATION_KEY', String.class, cb.lower(orderExpression), cb.literal("UCA400R1"));

1 个答案:

答案 0 :(得分:0)

该行为由BIND驱动,它具有3种设置:

自动
条件查询将绑定参数用于非数字的任何文字。如果未明确指定配置,这是默认行为。

绑定
用于增加JDBC语句缓存的可能性,您可能还希望对数字值使用绑定参数。 INLINE模式将对任何文字值使用绑定变量。

INLINE
模式将按原样内联文字值。为防止SQL注入,切勿对字符串变量使用INLINE。始终在hibernate.criteria.literal_handling_mode模式下使用常量。

要调整默认设置,请相应设置{{1}}。