2012-11-26 22 views
0

如何在BirtReport中自定義EclipseLink中的NamedQuery。Eclipselink或Hibernate中的NamedQuery自定義

下面是查詢和定製where子句BIRT報表

這是可以定製這樣的EclispeLink,你的幫助是非常讚賞。

查詢

select customernumber from orders 

定製凡查詢

<![CDATA[ 
var parmcount = params["parmorders"].value.length 
var whereclause = ""; 
if(parmcount > 0){ 
    whereclause = " where customernumber in ("; 
} 
for(i=0; i < parmcount; i++){ 
    if(i == 0){ 
     whereclause = whereclause + params["parmorders"].value[i]; 
    }else{ 
     whereclause = whereclause + " , " + params["parmorders"].value[i]; 
    } 
} 
if(parmcount > 0){ 
    this.queryText = this.queryText + whereclause + ") "; 
} 


    ]]> 

回答

0

條款從技術文檔:

指定Java持久化查詢語言 靜態,命名查詢。查詢名稱的範圍是持久性單元。所述 NamedQuery註釋可以應用於一個實體或映射超

所以,NamedQuery不能在運行時改變。同樣作爲參數更改的次數,查詢將會改變。因此在這種特殊情況下使用NamedQuery是不可行的。

但是,您可以嘗試創建查詢&在運行時根據參數動態地添加條件,就像在您的代碼中發佈一樣。

entityManager.createQuery(queryText).getResultList(); 

此外,您還可以使用關鍵字IN直接&設置列表作爲參數,以消除重複。

//-- Ignoring code for appending parameters & conditions 
String whereCondition = " where customernumber IN (:customerNumbers)"; 
queryText = queryText + whereCondition; 
entityManager.createQuery(queryText).setParameter("customerNumbers", customerNumbersList).getResultList(); 
+0

我會檢查,你的意思是我不能使用NamedQuery,而是我必須這樣做,只能使用createQuery,對嗎? – sunleo

+0

是的,休息是類似的,你已經完成了。 –