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