2014-11-20 3 views
0

В JPQL в состоянии где я хочу сделать:Сравнить Долго Строка

book.id like lower(:search) 

Проблема: book.id является Long но параметр :search является строка. Будет ли приведенное выше просто работать так, как есть, или мне нужно явно преобразовать book.id в String, и если это так, как мне это сделать?

ответ

1

Я хотел бы преобразовать :search параметр в Long и изменить состояние запроса на:

book.id = :search 

затем

List<Books> books = em.createQuery("... WHERE book.id = :search") 
         .setParameter("search", Long.valueOf(strSearch)) 
         .getResultList(); 

В общих чисел обработки быстрее, чем строки.

+0

Это не сработало, потому что в моем случае параметр ': search' используется не только для сравнения с этим идентификатором, но и с заголовком (пользователи могут искать идентификатор или заголовок). – Roland

+0

Хммм, такой случай не был частью первоначального вопроса;). Если вам нужно сравнить ': search' с строкой заголовка, тогда' LIKE' является правильным выбором. В любом случае было бы полезно обновить вопрос с помощью полного определения запроса (даже псевдокода), чтобы лучше понять идею, стоящую за ним. – wypieprz

1

Вы можете использовать оператор CAST в JPQL как:

CAST(book.id AS string) LIKE lower(:search) 

Но с этим решением, вы не сможете использовать любой индекс на столбце book.id.

 Смежные вопросы

  • Нет связанных вопросов^_^