В настоящее время я работаю над задачей повышения производительности действия, и самая медленная часть кода - это запрос гибернации:
.createQuery( "SELECT distinct p FROM CSParcel p " +
" WHERE p.bag.destination.loop.line.changeover.barcode = :barcode AND p.created > :limit " +
" AND (p.bag.destination.loop.courierLoop.id = :courierId OR p.bag.destination.loop.line.courier.id = :courierId)" +
" AND p.latestAction.actionType <> :doruceni" + " AND p.id NOT IN " +
"(SELECT pa.parcel.id " + " FROM CSParcelAction pa " +
" WHERE pa.actionType = :predani AND pa.courier.id = :courierId AND pa.timestamp > :limit" +
")", CSParcel.class )
.setParameter( "barcode", changeoverBarcode.toUpperCase() )
.setParameter( "limit", Time.setTime( 0, 0, 0, cal.getTime() ) )
.setParameter( "courierId", courierId )
.setParameter( "predani", CSParcelActionType.CHANGEOVER )
.setParameter( "doruceni", CSParcelActionType.DELIVERY )
.getResultList();
Есть ли способы заставить его работать быстрее?
Спасибо за каждое предложение.