Использование поиска без учета регистра В спящем режиме

Если у вас есть такая функция, как:

int foo()
{
    // more stuff
    foo();
}

Затем foo () будет продолжать называть себя, все глубже и глубже, и когда пространство, используемое для отслеживания того, какие функции вы используете, заполненный, вы получаете ошибку переполнения стека.

49
задан Chris 29 September 2008 в 18:40
поделиться

8 ответов

Для простого случая Вы описываете, смотрите на Restrictions.ilike (), который делает поиск без учета регистра.

Criteria crit = session.createCriteria(Person.class);
crit.add(Restrictions.ilike('town', '%fran%');
List results = crit.list();
72
ответ дан Cowan 7 November 2019 в 21:27
поделиться

С тех пор В спящем режиме 5.2 session.createCriteria, удерживается от использования. Ниже решение с помощью JPA 2 CriteriaBuilder. Это использует like и upper:

    CriteriaBuilder builder = session.getCriteriaBuilder();
    CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
    Root<Person> root = criteria.from(Person.class);

    Expression<String> upper = builder.upper(root.get("town"));
    criteria.where(builder.like(upper, "%FRAN%"));

    session.createQuery(criteria.select(root)).getResultList();
0
ответ дан 7 November 2019 в 11:27
поделиться
Criteria crit = session.createCriteria(Person.class);
crit.add(Restrictions.ilike('town', 'fran', MatchMode.ANYWHERE);
List results = crit.list();
37
ответ дан Roddy of the Frozen Peas 7 November 2019 в 21:27
поделиться

Если бы Вы используете HibernateTemplate Spring для взаимодействия с, в спящем режиме, вот то, как Вы сделали бы поиск без учета регистра на адресе электронной почты пользователя:

getHibernateTemplate().find("from User where upper(email)=?", emailAddr.toUpperCase());
9
ответ дан SamS 7 November 2019 в 21:27
поделиться

Вы также не должны вставлять подстановочные знаки '%'. Можно передать MatchMode ( документы для предыдущих выпусков сюда ) в сказать поиск, как вести себя. START, ANYWHERE, EXACT, и END соответствия являются опциями.

4
ответ дан joe776 7 November 2019 в 21:27
поделиться

Большинство сопоставлений базы данных по умолчанию не чувствительно к регистру, но в мире SQL Server это может быть установлено в экземпляре, базе данных и уровне столбца.

0
ответ дан Cade Roux 7 November 2019 в 21:27
поделиться

Обычный подход к игнорированию регистра должен преобразовать и значения базы данных и входное значение к верхнему регистру или нижнему регистру - результант sql имел бы, что-то как

select f.name from f where TO_UPPER(f.name) like '%FRAN%'

В в спящем режиме критерии restrictions.like (...) .ignoreCase ()

, я более знаком с Nhibernate, таким образом, синтаксис не мог бы составить 100%, точных

еще для некоторой информации, видят про, в спящем режиме, 3 извлечения и в спящем режиме документы 15.2. Сужение набора результатов

4
ответ дан Ahmed Ashour 7 November 2019 в 21:27
поделиться

Вы могли посмотреть на использование Компаса обертка выше lucene.

http://www.compass-project.org/

Путем добавления нескольких аннотаций к объектам области, которые Вы получаете, достигает такого рода вещи.

Компас обеспечивает простой API для работы с Lucene. Если Вы будете знать, как использовать ORM, то Вы будете чувствовать себя хорошо дома с Компасом с простыми операциями для сохранения, и удалять & запрос.

От самого сайта. "При Создании сверху Lucene Компас упрощает шаблоны общего использования Lucene, такие как поиск стиля Google, индексные обновления, а также более усовершенствованные понятия, такие как кэширование и индекс sharding (sub индексы). Компас также использует созданный в оптимизации для параллельных фиксаций и слияний".

я использовал это в прошлом, и я нахожу его большим.

0
ответ дан Paul Whelan 7 November 2019 в 21:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: