2012-04-21 69 views
0

我想使具有相同的行爲,下面的SQL查詢條件查詢預測:條件,以及與基於元素的列表

SELECT Count(*) 
FROM Datagathering_respuestas, Datagathering 
WHERE Datagathering.document = 4 AND Datagathering.id_datagathering = datagathering_respuestas.id_datagathering 
GROUP BY respuesta; 

它是所有圍繞以下幾個等級:

public class DataGathering { 
    private int id; 
    private Usuario user; 
    private Date fecha; 
    private int individual; 
    private DataDocument document; 
    private List<String> respuestas; 

和它的相應的映射文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="pe.com.abf.pws.clases.DataGathering"> 
    <id column="id_datagathering" name="id"> 
     <generator class="identity"/> 
    </id> 
    <many-to-one class="pe.com.abf.pws.clases.DataDocument" name="document"/> 
    <many-to-one class="pe.com.abf.pws.clases.Usuario" name="user"/> 
    <property name="individual"/> 
    <property name="fecha" type="timestamp"/> 
    <list name="respuestas"> 
     <key column="id_datagathering"/> 
     <index column="idx_respuesta"/> 
     <element column="respuesta" length="4000" type="string"/> 
    </list> 
    </class> 
</hibernate-mapping> 

我的主要問題是這裏的分組屬性「資源puestas「被定義爲字符串類型的元素列表,並沒有它自己的類。在SQL中,只需引用相應的表就很容易,但在Criteria中,我不知道如何引用要由它們分組的元素。我設法讓這個查詢:

 Criteria c = s.createCriteria(DataGathering.class); 
     c.add(Restrictions.eq("document.id", id)); 
     c.createCriteria("respuestas","resp"); 
     c.setProjection(Projections.projectionList().add(Projections.rowCount())); 

具有相同的行爲與上面的SQL查詢,但沒有GROUP BY元素,所以我想我靠近。問題再次出現,我不知道如何引用「respuestas」中的值。

任何想法如何才能完成我的查詢?任何幫助將不勝感激。

回答

0

我設法做這樣做如下:

da = s.createCriteria(DataGathering.class) 
     .add(Restrictions.eq("document.id", id)) 
     .createCriteria("respuestas","resp") 
     .setProjection(Projections.projectionList() 
       .add(Projections.groupProperty("resp.elements").as("resp")) 
       .add(Projections.count("resp.elements").as("amount"))) 
     .setResultTransformer(Transformers.aliasToBean(EncuestaHelper.class)) 
     .list(); 

的訣竅是使用標準的關鍵"elements"指一個普通的元素集合。然後,給出與特殊類的屬性相匹配的投影別名,您可以輕鬆製作該類的列表以在報告中使用它。

感謝任何人試圖幫助