Из-за проблем с производительностью при извлечении около 30 тыс. Результатов из БД в виде сущностей при использовании Hibernate JPA я вместо этого попытался написать namedQuery, чтобы лучше контролировать запрос и его время выполнения.В итоге я получаю почти 20 секунд только для тех немногих объектов, и эти 20 секунд необходимы для «старого» запроса и моего собственного namedQuery (который не займет ни секунды, чтобы получить результат при выполнении в клиенте SQL)так что в основном не имеет значения, использую ли я namedQuery или сгенерированный в спящем режиме запрос.
Можно ли предположить, что 98% времени используется для сопоставления этих результатов с соответствующими объектами?И если так, как я должен ускорить это?Ниже приведен запрос, который я написал сам (обратите внимание, что я явно должен указать все столбцы в SELECT)
SELECT exp.ID
,exp.CREATEDBY
,exp.CREATEDTIME
,exp.DELETED
,exp.LASTCHANGE
,exp.LASTCHANGEBY
,exp.STATUS
,exp.BRIXFIGURE
,exp.GRAMMAGE
,exp.INDIVIDUALPACKAGING
,exp.MINORDERQUANTITY
,exp.PACKAGINGHEIGHT
,exp.PACKAGINGLENGTH
,exp.PACKAGINGWIDTH
,exp.PALETTESIZE
,exp.QUANTITY
,exp.UNIT
,exp.VALIDUNTIL
,exp.EXPORTELEMENT_START
,exp.EXPORTSTATUS
,exp.webServiceResponse
,exp.CATEGORYID
,exp.COMMENTID
,exp.SUPPLIERID
,exp.TRANSPORTPACKAGINGID
,exp.LocationId
,exp.PriceRowId
,exp.EXPORTELEMENT_ENDDATE
,exp.BASEPRICE
,exp.BASEUNIT
,exp.BARCODES
,exp.EXPIRYDATE
,exp.PREORDERPERIOD
,exp.EXPORTWEEKID
,exp.EXPORT_TENDER_UID
,exp.EXPORT_UID
,exp.CURRENCY_ID
,exp.WEIGHT_PER_BOX
FROM EXPORTELEMENT AS exp
JOIN EXPORTELEMENT_LOCATION as exlo ON exlo.EXPORTELEMENTID = exp.ID
WHERE exlo.LOCATIONID = :locationId
AND exp.EXPORTELEMENT_ENDDATE <= :endDate
AND exp.EXPORTELEMENT_START >= :startDate
AND exp.DELETED = :deleted