Maison  >  Article  >  base de données  >  Comment échapper aux caractères spéciaux dans les requêtes natives JPA ?

Comment échapper aux caractères spéciaux dans les requêtes natives JPA ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-07 15:41:03481parcourir

How to Escape Special Characters in JPA Native Queries?

Échappement des caractères spéciaux dans les requêtes natives JPA

Lors de la construction de requêtes SQL natives dans l'API de persistance Java (JPA), les caractères spéciaux peuvent provoquer des problèmes d'analyse . L'un de ces caractères est le deux-points (':'), qui est couramment utilisé dans les variables utilisateur MySQL.

Le défi : échapper aux deux points dans les variables utilisateur MySQL

Pour Par exemple, considérons la requête suivante :

SELECT foo, bar, baz,
    @rownum:= if (@id = foo, @rownum+1, 1) as rownum,
    @id    := foo                         as rep_id
FROM
    foo_table
ORDER BY
    foo,
    bar desc

Pour exécuter cette requête à l'aide de la méthode createNativeQuery de JPA, nous rencontrerions une exception en raison de l'espace qui suit les deux points dans le @rownum assign.

La solution : échapper aux deux points à l'aide de barres obliques inverses

Pour échapper au caractère deux-points, nous devons le préfixer avec une barre oblique inverse (). Dans l'exemple ci-dessus, nous modifierions la requête comme suit :

SELECT foo, bar, baz,
    @\rownum:= if (@id = foo, @\rownum+1, 1) as rownum,
    @\id    := foo                         as rep_id
FROM
    foo_table
ORDER BY
    foo,
    bar desc

En échappant les deux-points, JPA analysera correctement la requête et permettra son exécution. Notez que cette technique d'échappement s'applique non seulement aux deux-points dans les variables utilisateur MySQL, mais également à tous les caractères spéciaux susceptibles d'interférer avec l'analyse des requêtes JPA.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn