Bonjour,
j'utilise HIBERNATE avec ORACLE dans mon application. J'ai une vue dont le nom est VW_LABORATORY_TESTS. La partie de code SQL pour laquelle j'ai un probleme est la suivante :
Code:
select '#' ||
(case when (select max(idat1.VALUE) from itemdata idat1, itemsequences iseq1, items i1
where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID
and i1.ITEM_ID=iseq1.ITEM_ID
and iseq1.ITEM_SEQUENCE_ID=idat1.ITEM_SEQUENCE_ID
and ((i1.SDS_VAR_NAME like '%' || ';LBDTC;' || '%') or (i1.SDS_VAR_NAME like 'LBDTC;' || '%') or (i1.SDS_VAR_NAME like '%' || ';LBDTC') or (i1.SDS_VAR_NAME = 'LBDTC'))
and i1.ITEMDATA_TYPE_ID=5)
is NULL then (case when ((select max(idat1.VALUE) from itemdata idat1, itemsequences iseq1, items i1
where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID
and i1.ITEM_ID=iseq1.ITEM_ID
and iseq1.ITEM_SEQUENCE_ID=idat1.ITEM_SEQUENCE_ID
and ((i1.SDS_VAR_NAME like '%' || ';LBDTC;' || '%') or (i1.SDS_VAR_NAME like 'LBDTC;' || '%') or (i1.SDS_VAR_NAME like '%' || ';LBDTC') or (i1.SDS_VAR_NAME = 'LBDTC'))
and i1.ITEMDATA_TYPE_ID=4) ||
(select max (idat1.VALUE) from itemdata idat1, itemsequences iseq1, items i1
where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID
and i1.ITEM_ID=iseq1.ITEM_ID
and iseq1.ITEM_SEQUENCE_ID=idat1.ITEM_SEQUENCE_ID
and ((i1.SDS_VAR_NAME like '%' || ';LBDTC;' || '%') or (i1.SDS_VAR_NAME like 'LBDTC;' || '%') or (i1.SDS_VAR_NAME like '%' || ';LBDTC') or (i1.SDS_VAR_NAME = 'LBDTC'))
and i1.ITEMDATA_TYPE_ID=3))
is NULL then (case when CAST('null' AS VARCHAR(255))
= 'null' then CAST(' ' AS VARCHAR(255))
else CAST('null' AS VARCHAR(255)) end)
else CAST(((select max(idat1.VALUE) from itemdata idat1, itemsequences iseq1, items i1
where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID
and i1.ITEM_ID=iseq1.ITEM_ID
and iseq1.ITEM_SEQUENCE_ID=idat1.ITEM_SEQUENCE_ID
and ((i1.SDS_VAR_NAME like '%' || ';LBDTC;' || '%') or (i1.SDS_VAR_NAME like 'LBDTC;' || '%') or (i1.SDS_VAR_NAME like '%' || ';LBDTC') or (i1.SDS_VAR_NAME = 'LBDTC'))
and i1.ITEMDATA_TYPE_ID=4) ||
(select max (idat1.VALUE) from itemdata idat1, itemsequences iseq1, items i1
where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID
and i1.ITEM_ID=iseq1.ITEM_ID
and iseq1.ITEM_SEQUENCE_ID=idat1.ITEM_SEQUENCE_ID
and ((i1.SDS_VAR_NAME like '%' || ';LBDTC;' || '%') or (i1.SDS_VAR_NAME like 'LBDTC;' || '%') or (i1.SDS_VAR_NAME like '%' || ';LBDTC') or (i1.SDS_VAR_NAME = 'LBDTC'))
and i1.ITEMDATA_TYPE_ID=3))AS VARCHAR(255)) end)
else (select max(idat1.VALUE) from itemdata idat1, itemsequences iseq1, items i1
where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID
and i1.ITEM_ID=iseq1.ITEM_ID
and iseq1.ITEM_SEQUENCE_ID=idat1.ITEM_SEQUENCE_ID
and ((i1.SDS_VAR_NAME like '%' || ';LBDTC;' || '%') or (i1.SDS_VAR_NAME like 'LBDTC;' || '%') or (i1.SDS_VAR_NAME like '%' || ';LBDTC') or (i1.SDS_VAR_NAME = 'LBDTC'))
and i1.ITEMDATA_TYPE_ID=5) end) || '#'
LBDTC
from
itemgroupdata igdat,
formdata fdat,
eventdata edat,
subjects sbj,
projects s,
sites si,
addresses ad,
countries c,
(select idat2.ITEM_GROUP_DATA_ID from items i2,itemsequences iseq2, itemdata idat2 where
i2.ITEM_ID=iseq2.ITEM_ID and iseq2.ITEM_SEQUENCE_ID=idat2.ITEM_SEQUENCE_ID and i2.SDS_VAR_NAME like '%' || 'LBTESTCD' || '%') res
where igdat.ITEM_GROUP_DATA_ID=res.ITEM_GROUP_DATA_ID
and igdat.FORM_DATA_ID=fdat.FORM_DATA_ID
and fdat.EVENT_DATA_ID=edat.EVENT_DATA_ID
and edat.SUBJECT_ID=sbj.SUBJECT_ID
and sbj.SITE_ID=si.SITE_ID
and sbj.PROJECT_ID=s.PROJECT_ID
and si.ADDRESS_ID=ad.ADDRESS_ID(+)
and ad.COUNTRY_ID=c.ID(+)
and sbj.QA='Y'
and s.PROJECT_ID=42264;
Quand j'execute cette requete avec SQL DEVELOPPER, tout se passe tres bien. J'obtiens 49 lignes de resultats :
Code:
LBDTC
----------------------------
# #
# #
# #
# #
#12/14/2007 08:45#
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
#12/30/2007 09:00#
#12/30/2007 09:00#
#12/30/2007 09:00#
#12/30/2007 09:20#
49 rows selected
Dans mon application,, j'essaye de recuperer les resultats par une query HIBERNATE :
Code:
ligne 1:String sql="select LBDTC from VW_LABORATORY_TESTS";
ligne 2:Query reportQuery = getSession().createSQLQuery(sql);
ligne 3:List<Object> result = reportQuery.list();
Et les logs de mon application m'indiquent qu'à la ligne 3, les 20 premiers lignes de resultats sont charges et apres le programme boucle indefiniment sans me donner de resultats. Il n'y a pas de stack trace. Le programme tourne juste indefiniment sans me donner aucune information. J'ajoute que les lignes de resultats semblent etre chargees 10 par 10. C'est a dire que dans les logs je remarque que les 10 premiers resultats sont charges, puis ensuite les 10 suivants et ensuite plus rien ne se passe.
Je ne comprend pas pourquoi ma requete passe avec SQL DEVELOPPER et pas avec ma query HIBERNATE.
Est-ce que quelqu'un peut me donner des indices pour resoudre ce probleme ? Merci à l'avance.