2010-11-11 78 views
5

我用一個HQL查詢得到一束狀態的對象,像這樣:使用cfqueryparam用ColdFusion的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 .... 

任何人都知道如何解決這個問題,並使用cfqueryparamcfquery HQL查詢?

在此先感謝!

回答

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>標籤休眠也許是試圖映射我傳遞一個數組的數量和失敗從而引發錯誤。

如果我刪除從屬性,像這樣的關係:

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

...然後它的作品。

0

間接回答:改爲使用綁定參數。

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

你必須仍然在變量上滾動自己的驗證。

+0

我實際上想要使用'cfquery'。這個答案意味着我回到了'ORMExecuteQuery()'這不是我想要的。 – 2010-11-11 13:43:20

+0

@ciaran - 你爲什麼要使用cfquery?你把orm當作sql抽象層嗎?如果是的話,你是錯過了一些/大部分的權力 – Antony 2010-11-11 22:59:02

+1

@Antony:主要原因是我不必做醜陋的字符串連接,並可以編寫多行可讀的語句! :) – 2010-11-12 20:16:17

2

取掉數據類型,它不是必需的,而hibernate可能不理解它們。