2016-08-30 9 views
0

NOT EXISTSを使用するSQLクエリがあります。どのようにこのクエリをHQLに変換するのですか?HQL(Hibernate)でのSQLクエリの変換

これは私の方法です:

public List<Cage> getByOwnerId(final Long ownerId, final String agriYearId) 
    { 
     return ((List<Cage>)getHibernateTemplate().executeFind(new HibernateCallback(){ 
      public Object doInHibernate(Session session){ 
       String queryString ="select " 
            +"from tbl_cage c, tbl_actor a, tbl_owner o, tbl_inscasecode i, tbl_country co, tbl_inscasecode g , tbl_code cd" 
            +" where " 
            +" i.pk_inscasecodeid = c.FK_CAGETYPE" 
            +" and cd.PK_CODEID=c.FK_CURRENCY " 
            +" and co.PK_COUNTRYID = c.fk_country " 
            +" and G.PK_INSCASECODEID=C.FK_CAGE_INSTALLATIONLOCATION " 
            +" and c.FK_OWNER = o.PK_OWNERID " 
            +" and c.FK_OWNER=:ownerId " 
            +" and " 
            + "not exists (select 1 from tbl_policy, tbl_fishpolicy_cage " 
            +" where c.PK_CAGEID = tbl_fishpolicy_cage.FK_CAGE " 
            +" and tbl_fishpolicy_cage.FK_FISHPOLICY = tbl_policy.PK_POLICYID AND (tbl_policy.FK_CODEID = '018008' OR tbl_policy.FK_CODEID ='018007' OR tbl_policy.FK_CODEID ='018013' OR tbl_policy.FK_CODEID ='018014') " 
            +" and tbl_policy.FK_AGRIYEARID=:agriYearId) " 
            +" and c.PRIMITIVE_COST>0 and c.CAGE_ISDESTROY=0"; 
       Query query = session.createSQLQuery(queryString); 
       List<Cage> returnList; 
       query.setParameter("ownerId", ownerId); 
       query.setParameter("agriYearId",agriYearId); 
       returnList=query.list(); 
       return returnList; 
    }})); 
} 

私はList<Object>を使用すると、私は、JSPページで繰り返すことはできない、と私はList<Cage>を使用するとき、私はこのエラーを得た:can not cast Object to Cage

答えて

0

クエリはCageエンティティのインスタンスを返しません。このエンティティから個々のフィールドを返します。そのようなクエリの結果は、リスト、選択されたすべてのフィールドを含む各オブジェクト[]です。

クエリは、複数のオブジェクトおよび/またはプロパティをオブジェクト型の配列として返すことができます。

returnList = (List<Cage>)session.createSQLQuery(queryString) 
         .setParameter("ownerId", ownerId) 
         .setParameter("agriYearId",agriYearId).list(); 
、これを試してみてください