java - 在 HQL (Hibernate) 中转换 SQL 查询

标签 java sql hibernate jsp hql

我有一个使用 NOT EXISTS 的 SQL 查询。如何将此查询转换为 HQL?

这是我的方法:

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 .

最佳答案

您的查询不会返回 Cage 实体的实例。它从该实体返回各个字段。这样的查询结果是一个List,每个Object[]包含所有选定的字段

查询可以将多个对象和/或属性作为对象类型的数组返回,因此请尝试解析。

试试这个,

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

关于java - 在 HQL (Hibernate) 中转换 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39229816/

相关文章:

java - 无法取消引用 int 的错误?

java - 使用 Java HID API(管理来自多个键盘的输入)打开 HID 设备时出现 NullPointerException

mysql - MySQL一对多和一对一关系是如何定义的?

sql - 如何获取关联的关联id为给定值的记录

java - Oracle 查询之间不采用结束日期时间

java - 如何在注释中使用元素实现 idbag?

java - 无法将 2 个视频流合并到一个文件中

mysql - 通过加入 MYSQL 在查询结果中获得位置

mysql - 适用于 phpMyAdmin 中的 MySQL 查询的 NonUniqueDiscoveredSqlAliasException

c# - 实体->接口(interface)关系,如何映射