Pregunta

¿Cómo escapar propiamente un '/' barra diagonal en una cadena de consulta JPQL?

Si hago esto:

LOCATE('/', REVERSE( ...

Puedo obtener:

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query

Sin embargo, si hago esto:

LOCATE('\\', REVERSE( ...

Todo está bien.

Entonces, ¿cómo puedo incluir la barra diagonal?

EDIT: Ya he intentado lo siguiente y no hacer el trabajo:

'\\/'
'//'
CHAR(47)
ESCAPE '/'
¿Fue útil?

Solución

No se puede reproducir con los datos proporcionados, las siguientes obras para mí:

@Test
public void testQueryWithLocateKeyword() {
    Product p1 = new Product("1234/Foo");
    Product p2 = new Product("12/Bar");
    em.persist(p1);
    em.persist(p2);
    em.flush();

    String qlString = "SELECT LOCATE('/', p.name) FROM Product p";

    List actual = em.createQuery(qlString).getResultList();

    List<Integer> expected = Arrays.asList(5, 3);

    assertNotNull(actual);
    ReflectionAssert.assertReflectionEquals(expected, actual);
}

Probado con Hibernate 3.5 EM (y H2).

Por favor, proporcione una consulta representativa, una StackTrace completa, la versión de hibernación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top