Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como ignorar linhas duplicadas ao inserir


Opção de estilo do banco de dados

O Hibernate não oferece a opção de adicionar uma opção ao seu insert into declarações. E não sei se a mesma opção está disponível para MS SQL.

Mas se você encontrar essa opção, poderá interceptar a instrução insert e adicioná-la:
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;
  }

} 

Você precisa declarar este interceptor em seu persistence.xml :
<property name="hibernate.ejb.interceptor" value="...IgnoreRowOnDupInterceptor" />

Opção de estilo JPA

Você pode lembrar a última linha da última análise (ou recuperá-la do banco de dados) e pular o arquivo até essa linha. Nesse caso, você ainda economizaria tempo para analisar cada item existente repetidamente.

No meu ponto de vista essa é a maneira JPA, pois normalmente você usa o banco de dados apenas como armazenamento e mantém a lógica de negócio na aplicação (Java).