1

私のデータベースでは、ユーザーの入力として電話番号を保存します(ユーザーに電話番号のフォーマットを決定させたい)

ユーザーが電話番号を検索するとき、おそらく 2 つの文字列を比較できるように番号をフォーマットすることはありません。数字の途中に括弧やその他の通常の電話区切りがある可能性があるため、「いいね」でもうまくいきません。

フィルターを適用して結果を比較した後、DB 上の各電話を検索条件と比較できるようにしたいと考えています。これまでのところ、適用したいフィルターは次のとおりです。

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);
}

したがって、上記のフィルターを休止状態のコンパレータとして使用する方法についてのヘルプをいただければ幸いです

4

2 に答える 2

2

あなたが望むものを正確に達成する方法がわかりません(そしてパフォーマンスについて疑問に思います)。実際、私は物事を別の方法で実装します。

ユーザーが好きなように電話番号を入力できるようにしたい場合は、ユーザー入力だけでなく正規化されたバージョンも保存し、正規化された入力で検索を実行します

正規化のために、電話番号を処理するために Google のライブラリを使用します。これは、仕事に最適なライブラリと思われます。a を格納するには aPhoneNumberを実装する必要があるかもしれませんUserTypeが、それは大したことではありません。

于 2010-06-23T20:00:12.963 に答える
1

正規表現を使用して、格納された数値を照会することをお勧めします。また、数値を標準形式で保存することをお勧めしますが、ユーザーが最初に提供した形式を維持したいということは理解しています。

Hibernate でさまざまな正規表現クエリを使用する手順については、こちらを参照してください

Hibernate は制限 APIでオペレーターをネイティブにRestrictions.sqlRestriction()サポートしていないため、おそらく使用する必要があります。rlike

于 2010-06-23T19:58:58.663 に答える