我有一个需要执行的SQL查询但是由于Hibernate我在执行时看到了一些问题。
我的查询在属性键 - sampleQuery 中设置,如下所示
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)
DAOImpl Class - 我试图像这样执行它 -
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();
}
问题现在出现在execute语句中,其中 logger.debug(fetchQuery.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框架。
答案 0 :(得分:0)
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("");
}
试一试。我希望它对你有所帮助