Использование CFQueryParam с помощью QQL ColdFusion HQL
-
08-10-2019 - |
Вопрос
Я использую запрос 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?
Заранее спасибо!
Решение 3
Я добрался до всего этого.
Мой 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" />
... тогда это работает.
Другие советы
Снимите DataType, это не требуется, а в гибернаке, вероятно, не понимает их.
Косвенный ответ: вместо этого используйте связанные параметры.
<cfset orderDetail = ORMExecuteQuery("from Orders where OrderID=:orderid and ProductID=:productid", {orderid=1, productid=901}, true)>
Вам придется все еще катиться собственной проверкой на переменных, хотя.