sql >> Base de Datos >  >> RDS >> Mysql

Cómo ignorar filas duplicadas al insertar

Opción de estilo de base de datos

Hibernate no ofrece agregar una opción a su insert into declaraciones. Y no sé si la misma opción está disponible para MS SQL.

Pero si encuentra esa opción, puede interceptar la declaración de inserción y agregarla usted mismo:

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

} 

Debe declarar este interceptor en su persistence.xml :

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

Opción de estilo JPA

Puede recordar la última línea del último análisis (o recuperarla de la base de datos) y omitir el archivo hasta esa línea. En ese caso, incluso ahorraría tiempo para analizar cada elemento existente una y otra vez.

Desde mi punto de vista, esta es la forma JPA, porque generalmente usa la base de datos solo como almacenamiento y mantiene la lógica comercial en la aplicación (Java).