Exemples de requêtes SQL natives Hibernate

Exemples de requêtes SQL natives Hibernate

Dans Hibernate, les requêtes HQL ou critères devraient pouvoir vous permettre d'exécuter presque toutes les requêtes SQL de votre choix. Cependant, de nombreux développeurs se plaignent que l'instruction SQL générée par Hibernate est lente et préfèrent davantage générer leur propre instruction SQL (SQL native).

Exemple de requêtes SQL natives

Hibernate fournit une méthodecreateSQLQuery pour vous permettre d'appeler directement votre instruction SQL native.

1. Dans cet exemple, vous dites à Hibernate de vous renvoyer un Stock.class, toutes les données sélectionnées (*) correspondront automatiquement à vos propriétés Stock.class.

Query query = session.createSQLQuery(
"select * from stock s where s.stock_code = :stockCode")
.addEntity(Stock.class)
.setParameter("stockCode", "7277");
List result = query.list();

2. Dans cet exemple, Hibernate vous renverra un tableau d'objets.

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();

Alternativement, vous pouvez également utiliser lesnamed query pour appeler votre instruction SQL native. VoirHibernate named query examples here.

L'instruction SQL générée par Hibernate est lente!?

Je ne suis pas d'accord sur l'énoncé «L'instruction SQL générée par Hibernate est lente». Souvent, j'ai découvert que cela était dû au fait que les développeurs ne comprenaient pas bien la relation avec la table et avaient fait des mappages de table incorrects ou mal utilisé les stratégies de récupération. Cela entraînera la génération par Hibernate de certaines instructions SQL inutiles ou la jonction de tables inutiles… Et les développeurs aiment prendre cette excuse et créer leur propre instruction SQL pour corriger rapidement le bogue, et ne se rendaient pas compte que le problème principal entraînerait plus de bogues en attente.

Conclusion

J'admets parfois que l'instruction SQL native est vraiment plus pratique et plus facile que HQL, mais, réfléchissez bien pourquoi vous avez besoin d'une instruction SQL native? Est-ce vraiment Hibernate que je ne peux pas faire? Si oui, alors allez-y ~

P.S In Oracle database, i more prefer to use native SQL statement in many critical performance queries, because i need to put the “hint” to improve the Oracle query performance.