Možnost stylu databáze
Hibernate nenabízí přidání možnosti do svého insert into
prohlášení. A nevím, jestli je stejná možnost dostupná pro MS SQL.
Ale pokud takovou možnost najdete, můžete zachytit příkaz insert a přidat to sami:
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;
}
}
Tento interceptor musíte deklarovat ve svém persistence.xml
:
<property name="hibernate.ejb.interceptor" value="...IgnoreRowOnDupInterceptor" />
Možnost stylu JPA
Můžete si zapamatovat poslední řádek z poslední analýzy (nebo jej načíst z databáze) a přeskočit soubor až na tento řádek. V takovém případě byste dokonce ušetřili čas, abyste znovu a znovu analyzovali každou existující položku.
Z mého pohledu je to cesta JPA, protože databázi obvykle používáte pouze jako úložiště a obchodní logiku zachováváte v (Java) aplikaci.