Java 在Hibernate中执行本机SQL查询时出现问题

Java 在Hibernate中执行本机SQL查询时出现问题,java,sql,hibernate,struts2,Java,Sql,Hibernate,Struts2,我有一个需要执行的SQL查询,但由于Hibernate,我在执行时看到一些问题 我的查询在Property key-sampleQuery中设置如下 DAOImpl类-我正试图这样执行它- try { String queryString =appQueryLoad.getProperty("sampleQuery"); Query fetchQuery=sessionODS.createSQLQue

我有一个需要执行的SQL查询,但由于Hibernate,我在执行时看到一些问题

我的查询在Property key-sampleQuery中设置如下

DAOImpl类-我正试图这样执行它-

            try
            {
            String queryString =appQueryLoad.getProperty("sampleQuery");
            Query fetchQuery=sessionODS.createSQLQuery(queryString);
            logger.info("Query to fetch ctgry details :"+queryString);

            fetchQuery.setParameter("mrkt_id",imt.getMrktId());
            fetchQuery.setParameter("cmpgn_nr","1");
            fetchQuery.setParameter("cmpgn_yr_nr","2014");
            fetchQuery.setParameter("lang_cd","uk_UK");

            fetchQuery.setCacheable(true);
            logger.debug(fetchQuery.list());
            sessionODS.getTransaction().commit();
            }
            catch(Exception e){
            logger.error("Error in retrieving the Shades details",e);
            sessionODS.getTransaction().rollback();
            }
现在的问题出现在执行语句中,其中logger.debugfetchQuery.list;正在调试时引发异常,如下所示

Hibernate:SELECT * FROM (SELECT lcl.line_nr line_nr, lcl.LINE_NR_SHRT_DESC_TXT LINE_NR_SHRT_DESC_TXT, mf.FSC_CD FSC_CD, mf.LCL_PRFL_CD LCL_PRFL_CD, NVL(mfi.SML_img_mrktg_fsc_path_txt, NVL (mfi.SML_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS small, NVL (mfi.lrg_img_mrktg_fsc_path_txt, NVL(mfi.LRG_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS large, NVL (mfi.XL_img_mrktg_fsc_path_txt, NVL (mfi.XL_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS xl FROM lcl_line_nr_lang lcl, mrkt_fsc mf, mrkt_fsc_img mfi WHERE lcl.mrkt_id = :mrkt_id AND lcl.lang_cd =:lang_cd AND lcl.cmpgn_nr =:cmpgn_nr AND lcl.cmpgn_yr_nr =:cmpgn_yr_nr AND lcl.mrkt_id = mf.mrkt_id AND lcl.item_fsc_nr = mf.item_fsc_nr AND mf.mrkt_id = mfi.mrkt_id(+)AND mf.mrkt_fsc_id = mfi.mrkt_fsc_id(+)) a WHERE (a.large = '' OR a.large IS NULL OR a.xl = '' OR a.xl IS NULL OR a.small = '' OR a.small IS NULL)
我试着在我的Toad上运行它,我得到了1行作为传递参数的结果,但在Java中,我在执行时看到了问题。 你能帮我执行这个有很多连接的查询吗

如果需要更多细节,一定要告诉我

技术信息:我使用带Hibernate的Struts-2框架

final Session session = sessionFactory.openSession();
String str =  " SELECT * FROM (SELECT lcl.line_nr line_nr, lcl.LINE_NR_SHRT_DESC_TXT LINE_NR_SHRT_DESC_TXT, mf.FSC_CD FSC_CD, mf.LCL_PRFL_CD LCL_PRFL_CD, NVL(mfi.SML_img_mrktg_fsc_path_txt, NVL (mfi.SML_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS small, NVL (mfi.lrg_img_mrktg_fsc_path_txt, NVL(mfi.LRG_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS large, NVL (mfi.XL_img_mrktg_fsc_path_txt, NVL (mfi.XL_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS xl FROM lcl_line_nr_lang lcl, mrkt_fsc mf, mrkt_fsc_img mfi WHERE lcl.mrkt_id = mrkt_id AND lcl.lang_cd = lang_cd AND lcl.cmpgn_nr = cmpgn_nr AND lcl.cmpgn_yr_nr = cmpgn_yr_nr AND lcl.mrkt_id = mf.mrkt_id AND lcl.item_fsc_nr = mf.item_fsc_nr AND mf.mrkt_id = mfi.mrkt_id(+)AND mf.mrkt_fsc_id = mfi.mrkt_fsc_id(+)) a WHERE (a.large = '' OR a.large IS NULL OR a.xl = '' OR a.xl IS NULL OR a.small = '' OR a.small IS NULL)" ;
SQLQuery q = session.createSQLQuery(str);
List<Object[]> entities = q.list();
for (Object[] entity : entities) {
    for (Object entityCol : entity) {
        System.out.print(" " + entityCol);
    }
    System.out.println("");
}

试试这个。我希望它能完全帮助您

如何传递这4个参数?您也可以定义它吗?简单的方法是将它们添加到我们现有的字符串中,例如a.small='+value+',其中的值来自您的methodpublic列表getListString a,string b{final Session Session=sessionFactory.openSession;String str=select*,其中a='+a+'和b='+b+';SQLQuery q=Session.createSQLQuerystr;List entities=q.List;for Object[]entity:entities{for Object entityCol:entity{System.out.print+entityCol;}System.out.println;}上面的代码将帮助您如何将参数传递到查询您的答案对我来说似乎有点困惑。因为我不明白您为什么没有在您的答案帖子中提到任何关于参数分配的内容。上面的评论看起来很清楚,但它不起作用。注意:如果可以,您能给我一个与我发布的相同查询的片段吗参数为-mrkt_id、cmpgn_nr、cmpgn_yr_nr、lang_cd@Roman-您好。这是我与问题共享查询和参数的地方。这有点相关,因为问题基于相同的概念。我会记住这一点。抱歉。Roman,Clockwork mus,Elliot-我仍然没有解决方案。我认为在这个问题中,我清楚在我当前的代码中提到了要求。请让我明确,这不是我故意重复输入的行为。
final Session session = sessionFactory.openSession();
String str =  " SELECT * FROM (SELECT lcl.line_nr line_nr, lcl.LINE_NR_SHRT_DESC_TXT LINE_NR_SHRT_DESC_TXT, mf.FSC_CD FSC_CD, mf.LCL_PRFL_CD LCL_PRFL_CD, NVL(mfi.SML_img_mrktg_fsc_path_txt, NVL (mfi.SML_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS small, NVL (mfi.lrg_img_mrktg_fsc_path_txt, NVL(mfi.LRG_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS large, NVL (mfi.XL_img_mrktg_fsc_path_txt, NVL (mfi.XL_IMG_MRKTG_CNCPT_PATH_TXT, '')) AS xl FROM lcl_line_nr_lang lcl, mrkt_fsc mf, mrkt_fsc_img mfi WHERE lcl.mrkt_id = mrkt_id AND lcl.lang_cd = lang_cd AND lcl.cmpgn_nr = cmpgn_nr AND lcl.cmpgn_yr_nr = cmpgn_yr_nr AND lcl.mrkt_id = mf.mrkt_id AND lcl.item_fsc_nr = mf.item_fsc_nr AND mf.mrkt_id = mfi.mrkt_id(+)AND mf.mrkt_fsc_id = mfi.mrkt_fsc_id(+)) a WHERE (a.large = '' OR a.large IS NULL OR a.xl = '' OR a.xl IS NULL OR a.small = '' OR a.small IS NULL)" ;
SQLQuery q = session.createSQLQuery(str);
List<Object[]> entities = q.list();
for (Object[] entity : entities) {
    for (Object entityCol : entity) {
        System.out.print(" " + entityCol);
    }
    System.out.println("");
}