6

私は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これを回避してcfqueryHQLクエリで使用する方法を知っている人はいますか?

前もって感謝します!

4

3 に答える 3

2

データ型を外してください。これは必須ではなく、休止状態はおそらくそれらを理解していません。

于 2010-11-11T21:56:03.463 に答える
1

間接的な答え: 代わりにバインドされたパラメーターを使用してください。

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

ただし、変数に対して独自の検証を行う必要があります。

于 2010-11-11T12:11:05.653 に答える
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" />

...それで動作します。

于 2010-11-15T14:21:02.993 に答える