2016-08-30 117 views
0

我有一个使用NOT EXISTS的SQL查询。如何将此查询转换为HQL?在HQL(休眠)中转换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

您的查询不会返回笼子实体的实例。它从这个实体返回单个字段。这样的查询的结果是一个列表,每个对象[]包含所有选择的字段

查询可以返回多个对象和/或属性作为Object类型的数组所以尝试解析。

试试这个,

returnList = (List<Cage>)session.createSQLQuery(queryString) 
         .setParameter("ownerId", ownerId) 
         .setParameter("agriYearId",agriYearId).list();