sql >> データベース >  >> RDS >> Mysql

挿入時に重複行を無視する方法

    データベーススタイルオプション

    Hibernateは、insert intoにオプションを追加することを提案していません。 ステートメント。また、同じオプションがMSSQLで使用できるかどうかもわかりません。

    ただし、そのようなオプションを見つけた場合は、挿入ステートメントをインターセプトして、自分で追加できます。

    public class IgnoreRowOnDupInterceptor extends EmptyInterceptor {
    
      public String onPrepareStatement(String sql) {
        if (sql.startsWith("insert into avaya_cm_cdr") {
          return sql.replace("insert into", 
            "insert /*+ ignore_row_on_dupkey_index(avaya_cm_cdr, i_avaya_cm_cdr_nodub) */ into");
        }
        return sql;
      }
    
    } 
    

    このインターセプターをpersistence.xmlで宣言する必要があります :

    <property name="hibernate.ejb.interceptor" value="...IgnoreRowOnDupInterceptor" />
    

    JPAスタイルオプション

    最後の解析の最後の行を覚えて(またはデータベースから取得して)、その行までファイルをスキップすることができます。その場合、既存のすべてのアイテムを何度も解析する時間を節約できます。

    私の見解では、これはJPAの方法です。これは、通常、データベースをストレージとしてのみ使用し、ビジネスロジックを(Java)アプリケーションに保持するためです。




    1. 簡単なPHPSQLログインのトラブルシューティング

    2. data.sqlMySQLDockerコンテナをインポートします

    3. mysqlwhileループ同等のブレーク

    4. Postgres-欠測データのカウントが0の行を返す方法は?