2015-01-15 45 views
1

我試圖獲取通過HQL查詢排序的項目列表。問題是,在排序上對象的HashSet(orber由ab.clienti.errIndirizzos,其中errIndirizzosHashSet的集上Clienti類)來完成,當我嘗試做排序休眠返回一個異常在HQL查詢中使用HashSet進行排序時發生Hibernate異常:org.hibernate.exception.SQLGrammarException:無法使用滾動執行查詢

Clienti.java:

public class Cliente implements java.io.Serializable { 
//declaration var 
private Set errIndirizzos = new HashSet(0);` 
..... 
} 

Cliente.hbm.xml

<set name="errIndirizzos" inverse="true" > 
    <key> 
     <column name="ID_CLIENTE" precision="18" scale="0" /> 
    </key> 
    <one-to-many class="ErrIndirizzo" /> 
</set> 

其中表ERR_INDIRIZZO和CLIENTE具有獨特的鍵"ID_CLIENTE"

HQL查詢順序是:

order by le.cliente.errIndirizzos 

其中le是包含Clienti

LetteraCliente.java

public class Letteracliente implements java.io.Serializable { 
..... 
private Cliente cliente 
...... 
} 
另一個表

letteraCliente.hbm.xml

<one-to-one name="cliente" class="it.allianz.images.bean.postaMassiva.Cliente" constrained="true"></one-to-one> 

錯誤:

org.hibernate.exception.SQLGrammarException: could not execute query using scroll 

什麼建議嗎?在此先感謝

+0

您可以顯示您正在使用的完整HQL嗎? – bedrin

回答

0

嘗試使用隱式連接,而不是:

select distinct le 
from Letteracliente le 
inner join le.cliente c 
inner join c.errIndirizzos e 
order by e.id 

使用INNER JOIN也會過濾所有Letteracliente沒有ClienteErrIndirizzo。 如果id不是您想要的,您可以爲ORDER BY選擇一些其他屬性。

相關問題