JPQL: Как включить прямую косую черту в строке запроса? - PullRequest
1 голос
/ 15 октября 2010

Как правильно избежать косой черты '/' в строке запроса JPQL?

Если я сделаю это:

LOCATE('/', REVERSE( ...

Я получу:

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

Однако, если я сделаю это:

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

Все будетхорошо.

Итак, как мне включить косую черту?

РЕДАКТИРОВАТЬ: я уже пробовал следующее, и они не работают:

'\\/'
'//'
CHAR(47)
ESCAPE '/'

1 Ответ

1 голос
/ 15 октября 2010

Не могу воспроизвести с предоставленными данными, следующие работы для меня:

@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);
}

Проверено с Hibernate EM 3.5 (и H2).

Пожалуйста, предоставьте репрезентативный запрос, полную трассировку стека, версию Hibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...