title: Using hibernate criteria, is there a way to escape special characters?
body: <p>For this question, we want to avoid having to write a special query since the query would have to be different across multiple databases. Using only hibernate criteria, we want to be able to escape special characters.</p>
  
  <p>This situation is the reason for needing the ability to escape special characters: </p>
  
  <p>Assume that we have table 'foo' in the database. Table 'foo' contains only 1 field, called 'name'. The 'name' field can contain characters that may be considered special in a database. Two examples of such a name are 'name_1' and 'name%1'. Both the '_' and '%' are special characters, at least in Oracle. If a user wants to search for one of these examples after they are entered in the database, problems may occur.</p>
  
  <pre><code>criterion = Restrictions.ilike("name", searchValue, MatchMode.ANYWHERE);
  return findByCriteria(null, criterion);
  </code></pre>
  
  <p>In this code, 'searchValue' is the value that the user has given the application to use for its search. If the user wants to search for '%', the user is going to be returned with every 'foo' entry in the database. This is because the '%' character represents the "any number of characters" wildcard for string matching and the SQL code that hibernate produces will look like: </p>
  
  <pre><code>select * from foo where name like '%' 
  </code></pre>
  
  <p>Is there a way to tell hibernate to escape certain characters, or to create a workaround that is not database type specific?</p>