【发布时间】:2019-12-02 05:16:15
【问题描述】:
我的HQL查询如下(Hibernate with MS SQL Server)
SELECT...FROM...WHERE...
AND...
AND REVERSE(SUBSTRING(REVERSE(**ALIAS.info**),0, CHARINDEX('@', REVERSE(**ALIAS.info**)))) in (:var1_0,:var1_1)
AND...
查询编译正确。但是,当我尝试使用query.list() method 时,它失败了。失败的原因是生成的sql query如下:
select...from...where...
and...
and (reverse(substring(reverse(**namedinfos2_.info**), 0, CHARINDEX('@')) in (?))
and...
请注意,在“@”之后缺少namedinfos2_.info again。因此CHARINDEX() function 失败,正如它所期望的2 parameters。
应该是这样的:
and...
and (reverse(substring(reverse(**namedinfos2_.info**), 0, CHARINDEX('@', **namedinfos2_.info**)) in (?))
and---
知道为什么会这样吗?或者我应该怎么做才能解决这个问题?
实际查询很长。 一个例子可以是这样的:
HQL:
select LastModifiedByUser.field
from namedinfo LastModifiedByUser
where REVERSE(SUBSTRING(REVERSE(LastModifiedByUser.info),0, CHARINDEX('@', REVERSE(LastModifiedByUser.info)))) in (:var1_0,:var1_1)
Hibernate 生成的 SQL
select namedinfos2_.field
form namedinfo namedinfos2_
where (reverse(substring(reverse(namedinfos2_.info), 0, CHARINDEX('@')) in (?))
注意-CHARINDEX 方法中缺少的LastModifiedByUser.info 转换 (2nd parameter)。
【问题讨论】:
-
我没有关注问题/问题,您可能需要清理代码并显示完整的查询。
-
实际查询很长。我用一个更小的例子更新了查询。
-
你能说出这个表达的目的是什么吗?
标签: sql-server hibernate hql