Bonjour, je travaille avec Java, jpa et hibernate. J'essaye d'implémenter une requête en JPQL, mais elle prend beaucoup trop de temps (j'ai même dû arréter la programme au bout de 5 minutes), comparé à une requête similaire proche faite en pur SQL, dans les même condition
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 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'.
L'object CustomObject est le suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 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); } }Voici la requête proche écrite en SQL pur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 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; } }
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 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';
Cette requête est instantanée. Donc qu'est-ce qu'il ne va pas avec la requête JPQL ?
Partager