2010-11-11 18 views
5

estoy usando una consulta HQL para conseguir un montón de objetos de estado, así:cfqueryparam con una consulta HQL ColdFusion

<cfquery name="LOCAL.qStates" dbtype="hql"> 
    from States where countryID = #ARGUMENTS.countryID# 
    order by name asc 
</cfquery> 

Esto funciona bien. Sin embargo, me criaron bien y quiero usar cfqueryparam, a ser posible de este modo:

<cfquery name="LOCAL.qStates" dbtype="hql"> 
    from States 
    where countryID = <cfqueryparam cfsqltype="cf_sql_integer" value="#ARGUMENTS.countryID#" /> 
    order by name asc 
</cfquery> 

Pero esto genera un error:

[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 .... 

Alguien sabe cómo evitar esto y utilizar cfqueryparam con cfquery ¿Consultas HQL?

¡Gracias de antemano!

Respuesta

1

Llegué al fondo de esto.

Mi objetivo era States configuración de este modo:

<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> 

Cuando se utiliza la etiqueta <cfqueryparam> Hibernate fue tal vez tratando de asignar el número que estaba pasando en forma de matriz y en su defecto por lo tanto tirar un error.

Si quito la relación de la propiedad de esta manera:

<cfproperty name="countryID" type="numeric" /> 

... entonces funciona.

0

Respuesta indirecta: utilice en su lugar los parámetros vinculados.

<cfset orderDetail = ORMExecuteQuery("from Orders where OrderID=:orderid and ProductID=:productid", {orderid=1, productid=901}, true)> 

Sin embargo, tendrá que hacer su propia validación de las variables.

+0

Realmente quiero usar 'cfquery'. Esta respuesta significa que estoy de vuelta a ysing 'ORMExecuteQuery()' que no es lo que quiero. –

+0

@ciaran - ¿Por qué quieres usar cfquery? ¿Estás tratando a orm como una capa de abstracción sql? si es así, te falta algo/la mayor parte de la energía – Antony

+1

@Antony: ¡La razón principal es que no tengo que hacer una fea concatenación de cadenas y puedo escribir sentencias de líneas múltiples que son legibles! :) –

2

Quite el tipo de datos, no es necesario e hiberne probablemente no los entienda.

Cuestiones relacionadas