当前位置: 首页 > 知识库问答 >
问题:

使用jpa从子查询中选择时出错

邵逸明
2023-03-14


我已尝试获取以下代码的结果:

List<SfsRepDemNote> lis = new ArrayList<SfsRepDemNote>();
            String sql = "select * from ( "
                    + "SELECT"
                    + "    core.SFS_REP_DEM_NOTES_ID,"
                    + "    Rank( ) Over( partition by core.hkid,core.scheme_code,core.demand_note_type Order by core.issue_date desc) rnk "
                    + "FROM"
                    + "    sfs_rep_dem_notes core"
                    + "    "
                    + "WHERE"
                    + "    core.void_ind = 'N'"
                    + "    AND   core.hold_ind = 'N'"
                    + "    AND   trunc(grace_due_date) <= TO_DATE( :dat ,'dd/mm/yyyy')"
                    + "    AND   hkid = :hkid "
                    + "    AND   exists ("
                    + "        SELECT"
                    + "            1"
                    + "        FROM"
                    + "            sfs_rep_dem_note_components com "
                    + "            JOIN sfs_loan_infos loinf ON com.sfs_loan_info_id = loinf.sfs_loan_info_id "
                    + "        WHERE"
                    + "            loinf.loan_ref_num in :ref  "
                    + "            and   core.sfs_rep_dem_notes_id = com.sfs_rep_dem_notes_id"
                    + "            AND   nvl(com.surcharge_unpaid,0) + nvl(com.instal_interest_unpaid,0) + nvl(com.instal_principal_unpaid,0) >= 1"
                    + "    )) where rnk = 1";
            Query query = super.getEntityManager().createQuery(sql);
            query.setParameter("dat", "01/02/2018");// letterDefaultDateFormat.format(defermentCase.getReceiveDate()));
            query.setParameter("hkid", "E80001");// defermentCase.getGaHkid());
            query.setParameter("ref", selectedValues);
            //logger.info(query.getParameterValue(3));

            List<Object[]> list = query.getResultList();
            logger.info("list =" + list.size());
            for (Object[] array : list) {
                //logger.info("id = " + array[0].toString());
                lis.add(findByPK(Long.parseLong(array[0].toString()),
                        SfsRepDemNote.class));
                // logger.info(tmpQuery.getResultList().size());
            }
            logger.info("end");
            return lis;

在某些情况下,我需要在上面使用“In cause”。我尝试使用createSelectNativeQuery()获得结果,但对于param:ref它不能在本机查询中工作,但在ejb ql中,我只是得到了以下错误消息:

null

我累坏了,大家能给我一些建议吗?thx寻求帮助

共有1个答案

阳宗清
2023-03-14

假设您使用的是纯jpa实现,只需将query query=super.getEntityManager().createNativeQuery(sql);替换为query query=super.getEntityManager().createNativeQuery(sql);。还可以部分编辑本机查询,从loinf.loan_ref_num IN:refloinf.loan_ref_num IN(:ref)

 类似资料:
  • 我刚开始冬眠。我有两张桌子,有一对多的关系。有两个表格: 这是一个父类,它与图像表有一对多关系 现在我想使用父类的id(即:pashminaId)从类中选择一个 如: 选择IMAGE_NAMETBL_IMAGEPASHMINA_ID='some_digit'; 我怎么能在图像类中传递pashminaId,因为没有它只有一个父类的对象创建。 那么,我如何在Hibernate中实现这一点? 谢谢!希望

  • 我试图使用jpa组件来选择从标题中获取的id。我在文档中找到了一个使用本机select查询的示例: 我试图用${header.id}替换“1”常量: 这似乎不管用,我明白了: 也许还有别的方法可以让它发挥作用?

  • 我试图使用JPA标准编写以下查询,但我无法选择子查询中的多列。 我陷入了下面的实现过程中,无法找到如何在子查询中选择多个列。请看我在代码中的评论(第三行)。 请帮我解决这个问题。

  • 我的问题与我在StackOverflow上看到的其他问题略有不同,所以请不要将此与之前的答案混淆。 我有个疑问 我想选择前500行,因为Oracle在GROUP和ORDER BY条件(证据)之前处理where子句,所以我必须通过将此查询包装在另一个查询中来选择前500行来实现这一点。 所以,现在我的查询看起来像... 这一切都很好,但我正在努力使用QueryOver API将其转换为NHibern

  • 我有一个关于jpa中的子查询类的问题。我需要创建两个自定义字段的子查询,但是子查询没有多选方法,选择方法有表达式输入参数(在查询中这是选择)和配置方法不合适。 此外,我对联接子查询结果有疑问,是否可能?怎么做呢? 我有: 链延伸度 消息实体 查询包装 我需要创建这个查询(这是查询的一部分,我从谓词中获得的另一部分。JPQL不合适) 在子查询中我做 但是,子查询在params中没有带有Compoun

  • 我正在使用Spring JPA执行所有数据库操作。但是,我不知道如何在Spring JPA中从表中选择特定的行(通过简单的WHERE子句连接)? 用户类: 存储库: