我正在使用HQL查询来获取一堆状态对象,如下所示:
<cfquery name="LOCAL.qStates" dbtype="hql">
from States where countryID = #ARGUMENTS.countryID#
order by name asc
</cfquery>
这很好用。但是,我很好,我想使用cfqueryparam
,理想情况如下:
<cfquery name="LOCAL.qStates" dbtype="hql">
from States
where countryID = <cfqueryparam cfsqltype="cf_sql_integer" value="#ARGUMENTS.countryID#" />
order by name asc
</cfquery>
但这会引发错误:
[empty string] java.lang.NullPointerException at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:353) at org.hibernate.impl.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:323) at org.hibernate.impl.QueryImpl.list(QueryImpl.java:98) at coldfusion.orm.hibernate.HibernatePersistenceManager._executeHQL(HibernatePersistenceManager.java:822) at coldfusion.orm.hibernate.HibernatePersistenceManager.executeHQL(HibernatePersistenceManager.java:751) at ....
任何人都知道如何解决此问题并使用cfqueryparam
进行cfquery
个HQL查询?
提前致谢!
答案 0 :(得分:2)
取消数据类型,这不是必需的,休眠可能不理解它们。
答案 1 :(得分:1)
我到底了。
我的States
对象设置如下:
<cfcomponent output="false" persistent="true">
<cfproperty name="stateID" type="numeric" fieldType="id" generator="identity" />
<cfproperty name="name" type="string" />
<cfproperty name="alphaCode" type="string" />
<!--- Relationships --->
<cfproperty name="country" type="array" fieldtype="many-to-one" cfc="Countries" fkcolumn="countryID" lazy="true" />
</cfcomponent>
当使用<cfqueryparam>
标签时,Hibernate可能会尝试将我传入的数字映射为数组并因此失败而导致错误。
如果我从属性中删除了这样的关系:
<cfproperty name="countryID" type="numeric" />
......然后就行了。
答案 2 :(得分:0)
间接答案:改为使用绑定参数。
<cfset orderDetail = ORMExecuteQuery("from Orders where OrderID=:orderid and ProductID=:productid", {orderid=1, productid=901}, true)>
你必须仍然对变量进行自己的验证。