web-dev-qa-db-fra.com

Différence entre requête, requête native, requête nommée et requête typée

Quelles sont les différences entre une requête, une requête native, une requête nommée et une requête typée? La requête "seul" existe-t-elle même ou s'agit-il simplement d'une abréviation? Dans mon esprit, une requête native est une requête écrite en SQL simple, alors qu'une requête nommée concerne des entités (hibernate-mapping). Quelqu'un peut-il expliquer ceci brièvement?

55
Chris311

Requête

Query fait référence à une requête JPQL/HQL avec une syntaxe similaire à celle de SQL généralement utilisée pour exécuter des instructions DML (opérations CRUD).

Dans JPA, vous pouvez créer une requête à l'aide de entityManager.createQuery(). Vous pouvez regarder dans API pour plus de détails.

Dans Hibernate, vous utilisez session.createQuery() "

NativeQuery

La requête native fait référence aux requêtes SQL réelles (en référence aux objets de base de données réels). Ces requêtes sont les instructions SQL pouvant être exécutées directement dans une base de données à l'aide d'un client de base de données.

JPA: entityManager.createNativeQuery() Hibernate (implémentation non-JPA): session.createSQLQuery()

NamedQuery

Similaire à la définition de la constante. NamedQuery est la façon dont vous définissez votre requête en lui donnant un nom. Vous pouvez définir cela dans un fichier de mappage en veille prolongée ou également en utilisant des annotations au niveau de l'entité.

TypedQuery

TypedQuery vous donne la possibilité de mentionner le type d'entité lorsque vous créez une requête. Par conséquent, toute opération ultérieure ne nécessite pas de transtypage explicite vers le type souhaité. Alors que l'API Query normale ne renvoie pas le type exact d'objet attendu et que vous devez convertir.

61
Abhijith Nagarajan