Je fais une recherche sur l'une de mes tables (base de données existante) et je reçois un temps horrible ici. La requête est construite par des critères de mise en veille prolongée api, .: par exempleHibernate, DB2 - Demandes en cours d'exécution
Criteria crit = getSessionFactory().getCurrentSession().createCriteria(P1.class);
crit.add(Restrictions.sqlRestriction("{alias}.compno like ?", "%" + s + "%", new StringType()));
crit.setMaxResults(25);
crit.setFirstResult(0);
crit.addOrder(Order.asc("compno"));
crit.list();
Comme vous pouvez le voir, je fais déjà une recherche de personnes ici pour améliorer la perfomance. Ce critère nécessite ~6 seconds
en moyenne.
Eh bien la requête native qui ressemble à ceci
select * from SCHEM.P1 where compno like '%100%' order by compno fetch first 25 rows only
ne prend que 10 ms
ce qui est une énorme différence imo. Pourquoi les critères sont-ils si lents? Dois-je revenir à la requête SQL native?
Bon point sur les commentaires:
Oui, il y a des relations que je ne l'ai pas eu la portée:
<set name="pI" table="P12" lazy="false">
<key column="awcompno" update="false" />
<one-to-many class="org.gee.hibernate.P12" not-found="ignore"/>
</set>
<one-to-one name="info" class="org.gee.hibernate.P13" />
<set name="ma" table="P03" lazy="true" schema="SCHEMP" mutable="false" >
<key column="macountry" property-ref="land" update="false" />
<one-to-many class="org.gee.hibernate.P03" not-found="ignore" />
</set>
<set name="users" table="P15" lazy="true">
<key column="apcompno" update="false" />
<one-to-many class="org.gee.hibernate.P15" not-found="ignore"/>
</set>
Besoin d'un renseignement: Utilisez-vous un à plusieurs/plusieurs à un/plusieurs à plusieurs dans votre entité? –
a mis à jour ma question cependant. – onigunn