У меня был репо (извините за португальские слова):
public interface EntityARepository extends JpaRepository<EntityA, Long> {
@Query("select new package.someDTO(lan.dataLancamento, lan.prazoVinculado, lan.valor, his.tipo, his.descricao) "
+ "from EntityA lan, EntityB his, EntityC cc "
+ "where lan.conta = cc.idCc "
+ "and lan.historico = his.idHistorico "
+ "and lan.dataLancamento >= :presente "
+ "and lan.dataLancamento <= :futuro "
+ "and cc.agencia = :agencia "
+ "and cc.numConta = :conta "
+ "order by lan.dataLancamento asc")
public List<someDTO> findByAgenciaAndContaEntreDatas(@Param("agencia") Long agencia, @Param("conta") Long conta, @Param("presente") Date presente, @Param("futuro") Date futuro);
И этот метод работает, но для возврата списка из 3 элементов требуется 5-6 секунд. В PL / SQL Developer этот же запрос занимает 0,015 с:
select lan.data_lancamento,
lan.prazo_vinculacao,
lan.valor,
his.tipo_lancamento,
his.descricao
from tableA lan, tableB his, tableC cc
where lan.cc = cc.id_cc
and lan.historico = his.id_historico
and lan.data_lancamento >= '17/05/2012'
and lan.data_lancamento <= '17/08/2012'
and cc.agencia = 1
and cc.num_conta = 201243
order by lan.data_lancamento asc;
Я использую локальную базу данных Oracle. Как я могу улучшить этот запрос, чтобы быть быстрее? Я думал, что мог бы использовать nativeQuery = true
, но это остановит использование new package.someDTO
, и поскольку мой запрос смешивает данные из 2 таблиц и использует 3-ю для проверки некоторых данных. Я не могу создать новый репозиторий на основе моего DTO, поскольку у него нет первичного ключа и уникального атрибута.