Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana mengabaikan baris duplikat saat menyisipkan

Opsi gaya basis data

Hibernate tidak menawarkan untuk menambahkan opsi ke insert into pernyataan. Dan saya tidak tahu apakah opsi yang sama tersedia untuk MS SQL.

Tetapi jika Anda menemukan opsi seperti itu, Anda dapat mencegat pernyataan sisipan dan menambahkannya sendiri:

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

} 

Anda perlu mendeklarasikan pencegat ini di persistence.xml . Anda :

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

Opsi gaya JPA

Anda dapat mengingat baris terakhir dari penguraian terakhir (atau mengambilnya dari database) dan melewatkan file hingga baris itu. Dalam hal ini Anda bahkan akan menghemat waktu untuk mengurai setiap item yang ada lagi dan lagi.

Dari sudut pandang saya, ini adalah cara JPA, karena Anda biasanya menggunakan database hanya sebagai penyimpanan dan menyimpan logika bisnis di aplikasi (Java).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LOAD DATA INFILE dengan mudah mengkonversi YYYYMMDD ke YYYY-MM-DD?

  2. Pilih dan tampilkan hanya catatan duplikat di MySQL

  3. MySQL, Periksa apakah ada kolom dalam tabel dengan SQL

  4. Python:ValueError:karakter format yang tidak didukung ''' (0x27) pada indeks 1

  5. Bagaimana cara membuat file konfigurasi global?