Hola chicos, estoy teniendo algunos problemas con las coincidencias exactas mientras hago un NamedQuery.JAVA: NamedQuery String problema
actualmente estoy usando algo como esto:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from Entry e where e.name =:"+ Entry.NAME)
...
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName());
Funciona para la mayoría de los casos, sin embargo me di cuenta de que, en caso de que el usuario pase el nombre del archivo con un espacio al final, la namedQuery hace caso omiso de ese personaje. Por ejemplo:
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName()+ " ");
Devolverá el mismo resultado que la consulta anterior. Pasando por alto mi validación de 'entrada válida'. En otras palabras, me gustaría que la consulta no devuelva ninguna entrada y trate el error más adelante.
Una solución que podía pensar, es poner comillas simples que rodean mi parámetro en el namedQuery, así:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from entry e where e.name =':"+ Entry.NAME "'")
Sin embargo, será la basura mi código en caso de que la cadena contiene comillas simples en ella ..
¿Alguna idea, chicos?
Hola axtavt, gracias por la rapidez en la respuesta! Bueno, mi base de datos está configurada en VARCHAR. Pero no estoy seguro si la versión de MySql tiene algo que ver con este problema. También pensé en hacer algunos ajustes antes de establecer el parámetro para la consulta, sin embargo, quería que el software devolviera el error por cualquier cosa que fuera diferente de la base de datos, asegurando que el usuario ingresa exactamente lo que quería. –
@flavio: No estoy familiarizado con MySQL, por lo que no puedo decir nada sobre sus características. También tenga en cuenta que mi muestra de consulta recorta el valor almacenado, no el parámetro, por lo que el resultado debe ser exacto. – axtavt
Depuré el código comprobando el proceso de creación de la consulta ... Con el código proporcionado, parece que el problema está en mySql. Noté que ambos parámetros y la entrada de la base de datos SON diferentes ... sin embargo, para una fuerza divina mística desconocida, MySql simplemente recorta los espacios y considera que coincide exactamente ... Ahora creo que tengo que hacer algunas investigaciones para ver si esto es así. realmente un comportamiento esperado de MySql o hay algo más detrás de esto. Por el momento, creo que tendré que hacer algún tipo de controles adicionales. ¡Gracias! –