L'utilisation d'hibernate critères, il est un moyen d'échapper les caractères spéciaux?

Pour cette question, nous voulons éviter d'avoir à écrire une requête spéciale depuis la requête devrait être différente sur plusieurs bases de données. En utilisant seulement hibernate critères, nous voulons être en mesure d'échapper les caractères spéciaux.

Cette situation est la raison pour avoir besoin de la capacité à échapper les caractères spéciaux:

Supposons que nous avons le tableau " foo " dans la base de données. La Table 'foo' ne contient que des 1, appelé "nom". Le nom de domaine peut contenir des caractères qui peuvent être considérés comme spéciaux dans une base de données. Deux exemples de ce nom sont "name_1' et 'nom%1'. À la fois le '_' et '%' sont des caractères spéciaux, au moins dans Oracle. Si un utilisateur souhaite effectuer une recherche pour l'un de ces exemples une fois qu'ils sont entrés dans la base de données, des problèmes peuvent se produire.

criterion = Restrictions.ilike("name", searchValue, MatchMode.ANYWHERE);
return findByCriteria(null, criterion);

Dans ce code, 'searchValue' est la valeur que l'utilisateur a donné l'application à utiliser pour la recherche. Si l'utilisateur souhaite effectuer une recherche pour '%', l'utilisateur va être retourné avec tous les 'foo' entrée dans la base de données. C'est parce que le caractère '%' représente le "nombre de caractères" joker pour la correspondance de chaîne et le code SQL qui hibernate produit ressemblera:

select * from foo where name like '%' 

Est-il un moyen de dire à hibernate pour échapper certains caractères, ou à créer une solution de contournement qui n'est pas le type de base de données spécifique?

OriginalL'auteur Kevin Crowell | 2009-03-23