JPQL запрос с NEW, который занимает слишком много времени - PullRequest
0 голосов
/ 13 января 2020

Я работаю с 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?

1 Ответ

0 голосов
/ 18 января 2020

причина в том, что было слишком много данных для сбора. Когда я запускаю следующий запрос

select co.num 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'.

, у меня 105 000 результатов. Поэтому серверу не хватает памяти для рендеринга других объектов и создания CustomObject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...