【发布时间】:2014-01-23 22:44:09
【问题描述】:
java.persistence.Query 中的函数 CreateQuery(string) 返回的查询与我的请求不同。
我的函数输入字符串是:
来自底层证券 where (SUBSTRING(ticker, (charindex('.', ticker) + 1), (len(ticker) - charindex('.', ticker))) 以 (:exchanges) 顺序排列 股票代码
当我在 Query 上调用 getResultList() 时,我在日志中看到以下 sql:
休眠:选择底层0_.id 作为id63_,底层0_.updated_date 作为updated2_63_,底层0_.updated_user 作为updated3_63_, 底层0_.version 作为版本63_,底层0_.adr 作为adr63_, 底层0_.desk 作为desk63_,底层0_.enabled 作为启用63_, 底层0_.forward_start_enabled 为forward8_63_, 底层0_.ticker 为ticker63_,底层0_.vol_shift_type 为 vol10_63_ 来自底层证券 底层0_ 其中 (substring(underlying0_.ticker, charindex('.', underlying0_.ticker)+1) 在 (?)) 中按底层 0_.ticker 排序
此查询不是有效的 SQL Server 2008 查询,正如预期的那样,我收到了一个错误:
SQL 错误:174,SQLState:S0001 子字符串函数需要 3 个参数。
有人知道这里发生了什么吗?
仅供参考,我尝试了以下两种方言 1) org.hibernate.dialect.SQLServer2008Dialect 和 2) org.hibernate.dialect.SQLServer2008Dialect
【问题讨论】:
-
你能试试 LENGTH(ticker) 而不是 len(ticker)。
-
感谢 Gayathri 的回复,我尝试将 LEN 替换为 LENGTH,但是,我得到了相同的结果,即我的输入中的 3 个 args 被转换为 2 个 args,如日志条目中所示。
-
我认为您缺少右括号。
-
再次感谢 Gayathri,非常感谢!那也不是问题。我发现了问题,将在下面提供答案。谢谢!
-
很高兴你找到它!我使用 Locate() 而不是 charindex 在 Oracle 上运行了相同的查询,效果很好。
标签: java spring hibernate jpa-2.0 substring