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