Я работаю с java и в спящем режиме. Я пытаюсь реализовать этот запрос в JPQL, но на самом деле это занимает слишком много времени (мне даже пришлось останавливать программу по прошествии 5 минут) по сравнению с аналогичным аналогичным запросом, выполненным в чистом SQL в том же состоянии.
select NEW package.CustomObject(co.num, item, dim, mat, pro) from Object1 co LEFT JOIN co.items item LEFT JOIN item.dim dim LEFT JOIN item.mat mat LEFT JOIN item.pro pro
where co.ins between '2018-12-26 01:00:00' and '2019-06-26 01:00:00'
or co.mod between '2018-12-26 01:00:00' and '2019-06-26 01:00:00'.
CustomObject имеет следующий вид:
public class CustomObject {
private String num;
private OtherCustomObject other;
public CustomObject(String num, ItemObject item, DimObject dim, MatObject mat, ProObject pro) {
this.num = num;
this.other = new OtherCustomObject(item, dim, mat, pro);
}
}
public class OtherCustomObject {
private String property1;
private String property2;
private String property3;
private DimObject dim;
private MatObject mat;
private ProObject pro;
public OtherCustomObject(ItemObject item, DimObject dim, MatObject mat, ProObject pro) {
this.property1 = item.getProperty1();
this.property2 = item.getProperty2();
this.property3 = item.getProperty3();
this.dim = dim;
this.mat = mat;
this.pro = pro;
}
}
Вот аналогичный запрос на закрытие, выполненный в чистом виде SQL
select co.num
from table1 co left join ItemTable item on item.ou = co.ou left join DimTable dim on dim.item_id = item.id left join MatTable mat on mat.item_id = item.id left join ProTable pro on pro.item_id = item.id
where co.ins between '2018-12-26 01:00:00' and '2019-06-26 01:00:00'
or co.mod between '2018-12-26 01:00:00' and '2019-06-26 01:00:00';
Этот запрос почти мгновенный. Так что не так с моим запросом JPQL?