Игнорировать регистр в запросе JDO - PullRequest
3 голосов
/ 30 июля 2010

Я бы хотел выбрать список результатов из базы данных, но оператор == для запросов JDO чувствителен к регистру.Есть ли способ выбрать «USER», «user» и «User» из таблицы, используя один параметр?

В MySQL у вас есть оператор LIKE, а в Java функция equalsIgnoreCase,Однако ни один из них не работает в этом примере.

PersistenceManager pm = JDO.factory.getPersistenceManager();

Query query = pm.newQuery(User.class, "username == usernameParam");
query.declareParameters("String usernameParam");

List<User> results = (List<User>) query.execute(username);

Ответы [ 2 ]

5 голосов
/ 30 июля 2010

Вам необходимо хранить копию своего поля без учета регистра - например, в нижнем регистре, хотя лучше использовать «случай сортировки», если он доступен.Затем выполните запрос по этому вопросу.

Причина этого заключается в том, что нет способа эффективно выполнять поиск по обычному индексу с учетом регистра.

4 голосов
/ 11 февраля 2012

В JDOQL доступно несколько методов String. Проверьте документацию здесь .

Чтобы исправить вашу проблему, вы можете сделать следующее:

PersistenceManager pm = JDO.factory.getPersistenceManager();

Query query = pm.newQuery(User.class, "username.toUpperCase() == usernameParam");
query.declareParameters("String usernameParam");

List<User> results = (List<User>) query.execute(username.toUpperCase());
...