2012-04-21 12 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> 

私の主な問題は、グループ化プロパティ「RESですpuestas "はstring型の要素のリストとして定義され、それ自身のクラスはありません。 SQLでは、対応するテーブルへの参照だけで簡単ですが、Criteriaでは、それらをグループ化する要素をどのように参照するかわかりません。

要素によって上記のSQLクエリとしてではなくグループなしで同じ動作を持ってい
 Criteria c = s.createCriteria(DataGathering.class); 
     c.add(Restrictions.eq("document.id", id)); 
     c.createCriteria("respuestas","resp"); 
     c.setProjection(Projections.projectionList().add(Projections.rowCount())); 

ので、私は、私は近いと思う:私はこのクエリを取得するために管理しています。問題は再び私が "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"を使用していることです。次に、特殊クラスのプロパティと一致する投影エイリアスを与えると、そのクラスのリストをレポートに使用することが簡単にできます。

助けようとした人のおかげです。