ブロックするサイト名を入力できるtextareaがあります。入力されたすべてのサイトがSITESテーブルに格納されます。入力されたサイトのいずれかがSITESテーブルにある場合は、それらのサイトを無視して、残りのサイトを挿入する必要があります。
hibernateを使用してそれをどのように行う必要がありますか?
Hibernateまたはデータベースレベルで実行できる(そしておそらく実行すべき)のは、サイト名を含むフィールドに一意の制約を追加することだけです。これにより、重複が追加された場合に備えて例外が発生するようになります。ただし、この例外を防ぐには、アプリケーションコードに既存のサイトがあるかどうかを確認する必要があります。たとえば、追加するサイトごとにクエリを使用するか、テーブル全体を一度に読み込んでから、入力した各サイト名を確認します。
重複を確実に識別するために、空白のトリミングや小文字への変換など、サイト名の何らかの正規化が必要になる可能性があることに注意してください(たとえばwww.EXAMPLE.com
、www.example.com
おそらく等しいと見なす必要があります)。Hibernate Validatorでは、パターン制約を使用してこの正規化を適用できます。
最初のクエリを実行します。
select site.name from Site site where site.name in (:enteredSiteNames)
次に、入力されたサイトのリストから見つかったすべてのサイトを削除します(それらはすでにデータベースにあるため)。
次に、残りのサイトを繰り返し処理し、それらを永続化します。