Если у вас есть такая функция, как:
int foo()
{
// more stuff
foo();
}
Затем foo () будет продолжать называть себя, все глубже и глубже, и когда пространство, используемое для отслеживания того, какие функции вы используете, заполненный, вы получаете ошибку переполнения стека.
Для простого случая Вы описываете, смотрите на Restrictions.ilike (), который делает поиск без учета регистра.
Criteria crit = session.createCriteria(Person.class);
crit.add(Restrictions.ilike('town', '%fran%');
List results = crit.list();
С тех пор В спящем режиме 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();
Criteria crit = session.createCriteria(Person.class);
crit.add(Restrictions.ilike('town', 'fran', MatchMode.ANYWHERE);
List results = crit.list();
Если бы Вы используете HibernateTemplate Spring для взаимодействия с, в спящем режиме, вот то, как Вы сделали бы поиск без учета регистра на адресе электронной почты пользователя:
getHibernateTemplate().find("from User where upper(email)=?", emailAddr.toUpperCase());
Вы также не должны вставлять подстановочные знаки '%'. Можно передать MatchMode ( документы для предыдущих выпусков сюда ) в сказать поиск, как вести себя. START
, ANYWHERE
, EXACT
, и END
соответствия являются опциями.
Большинство сопоставлений базы данных по умолчанию не чувствительно к регистру, но в мире SQL Server это может быть установлено в экземпляре, базе данных и уровне столбца.
Обычный подход к игнорированию регистра должен преобразовать и значения базы данных и входное значение к верхнему регистру или нижнему регистру - результант sql имел бы, что-то как
select f.name from f where TO_UPPER(f.name) like '%FRAN%'
В в спящем режиме критерии restrictions.like (...) .ignoreCase ()
, я более знаком с Nhibernate, таким образом, синтаксис не мог бы составить 100%, точных
еще для некоторой информации, видят про, в спящем режиме, 3 извлечения и в спящем режиме документы 15.2. Сужение набора результатов
Вы могли посмотреть на использование Компаса обертка выше lucene.
http://www.compass-project.org/
Путем добавления нескольких аннотаций к объектам области, которые Вы получаете, достигает такого рода вещи.
Компас обеспечивает простой API для работы с Lucene. Если Вы будете знать, как использовать ORM, то Вы будете чувствовать себя хорошо дома с Компасом с простыми операциями для сохранения, и удалять & запрос.
От самого сайта. "При Создании сверху Lucene Компас упрощает шаблоны общего использования Lucene, такие как поиск стиля Google, индексные обновления, а также более усовершенствованные понятия, такие как кэширование и индекс sharding (sub индексы). Компас также использует созданный в оптимизации для параллельных фиксаций и слияний".
я использовал это в прошлом, и я нахожу его большим.