Поиск свойства в Hibernate после применения функции - PullRequest
1 голос
/ 23 июня 2010

В моей базе данных я храню телефонные номера вещей как вводимые пользователем (я хочу, чтобы пользователь сам решал, как он форматирует свой номер телефона)

, когда пользователи ищут номер телефона, они, скорее всего, не будут форматироватьчисло таким образом, что я могу просто сравнить две строки.Даже «как» не сработает, поскольку, возможно, номер имеет круглую скобку или какой-либо другой обычный разделитель телефона в середине.

Я хочу иметь возможность сравнивать каждый телефон в БД с моими критериями поиска после примененияфильтровать и сравнивать результаты.Пока что фильтр, который я хочу применить, это:

private String numberFilter(String num){
    num = num.replace("+", "00");
    num = num.replace("(", "");
    num = num.replace("(", "");
    num = num.replace("-", "");
    num = num.replace(" ", "");
    if (num.contains("ext"))
        num = num.substring(0, num.indexOf("ext"));
    return num;
}

И что я делаю для сравнения телефонов (все еще отсутствует фильтр)

public List<Entity> getEntityByTelephone(String telephone) {
    DetachedCriteria criteria = DetachedCriteria.forClass(Entity.class);
    criteria.createAlias("telephones", "tl", CriteriaSpecification.INNER_JOIN);
    criteria.add(Restrictions.like("tl.number", telephone));
    return (List<Entity>) getHibernateTemplate().findByCriteria(criteria);
}

Так что помогите наспособ использования фильтра выше в качестве компаратора в спящем режиме был бы признателен

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

Я не знаю, как достичь именно того, чего вы хотите (и мне интересно, о выступлениях), и на самом деле, я бы реализовал вещи по-другому.

Если вы действительно хотите позволить пользователю вводить телефонные номера по своему усмотрению, просто сохраните пользовательский ввод, но также нормализованная версия и выполните поиск по нормализованному вводу .

Для нормализации я бы использовал библиотеку Google для работы с телефонными номерами , которая кажется идеальной библиотекой для работы. Для хранения PhoneNumber может потребоваться реализация UserType, но это не имеет большого значения.

1 голос
/ 23 июня 2010

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

Инструкции по использованию различных запросов регулярных выражений в Hibernate см. Здесь .

Возможно, вам потребуется использовать Restrictions.sqlRestriction(), поскольку Hibernate изначально не поддерживает оператор rlike в API ограничений .

...