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).