2008-11-17 10 views
5

Tengo una consulta SQL SELECT que tiene una cláusula LIKE contiene un carácter de subrayado, que debe buscar específicamente un guión, no tratarlo como un comodín:Configurar Hibernate para escapar de subrayado en la cláusula como el uso de dialecto SQL Server

SELECT * FROM my_table WHERE name LIKE '_H9%'; 

Entiendo que puedo cambiar la cláusula actual a '[_] H9%' para que funcione como esperaba, pero el problema es que esta cláusula está siendo generada por Hibernate.

¿Hay alguna manera de configurar Hibernate para que escape todos los guiones bajos en todas las consultas de esta manera? En su defecto, ¿hay alguna forma de configurar SQL Server (2008 en mi caso) en y no en tratar los caracteres de subrayado como comodines?

+0

Qué API está utilizando con Hibernate (es decir, criterios de consulta, HQL, etc.)? Será útil si proporciona parte de la configuración de código/hibernación. – FoxyBOA

Respuesta

5

Si está utilizando Criteria para crear la consulta, puede crear su propia expresión que subclases org.hibernate.criterion.LikeExpression, usando uno de los constructores protegidos que toma 'Character escapeChar', y lo sustituye en el valor para ti Asumiendo que '!' es un valor conocido que no será en ningún cadenas de búsqueda (se puede escoger cualquier te gusta, supongo), sólo puede hacer:

public class EscapingLikeExpression extends LikeExpression { 
    public EscapingLikeExpression(String propertyName, String value) { 
     super(propertyName, escapeString(value), '!', false); 
    } 

    static String escapeString(String inputString) { 
    inputString = inputString.replace("_", "!_"); 
    return inputString; 
    } 

} 

Si no hay este tipo de caracteres (que no aparece en su valor de búsqueda como literales) a continuación, añadir lo siguiente como la primera línea de escapeString() para escapar de los que son demasiado:

inputString = inputString.replace("!", "!!"); 
0

¿Por qué no puede hacer un reemplazo de cadena en el valor? ¿Cómo se usa esto para que esta sea una solución no viable?

Cuestiones relacionadas