这是我从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"));
答案 0 :(得分:0)
该行为由BIND
驱动,它具有3种设置:
自动
条件查询将绑定参数用于非数字的任何文字。如果未明确指定配置,这是默认行为。
绑定
用于增加JDBC语句缓存的可能性,您可能还希望对数字值使用绑定参数。 INLINE
模式将对任何文字值使用绑定变量。
INLINE
模式将按原样内联文字值。为防止SQL注入,切勿对字符串变量使用INLINE
。始终在hibernate.criteria.literal_handling_mode
模式下使用常量。
要调整默认设置,请相应设置{{1}}。