Mysql
 sql >> Database >  >> RDS >> Mysql

Come ignorare le righe duplicate durante l'inserimento

Opzione stile database

Hibernate non offre l'aggiunta di un'opzione al suo insert into dichiarazioni. E non so se la stessa opzione è disponibile per MS SQL.

Ma se trovi una tale opzione, puoi intercettare la dichiarazione di inserimento e aggiungerla tu stesso:

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

} 

Devi dichiarare questo intercettore nel tuo persistence.xml :

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

Opzione stile JPA

Potresti ricordare l'ultima riga dell'ultima analisi (o recuperarla dal database) e saltare il file fino a quella riga. In tal caso risparmieresti anche il tempo di analizzare ogni elemento esistente ancora e ancora.

Dal mio punto di vista questo è il metodo JPA, perché di solito usi il database solo come memoria e mantieni la logica aziendale nell'applicazione (Java).