sql >> Databáze >  >> RDS >> Mysql

Jak ignorovat duplicitní řádky při vkládání

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.




  1. Co je připojovací řetězec ovladače MySQL JDBC?

  2. Sečtete hodiny ze sledování času do kalendáře podle dne

  3. InnoDB vkládá velmi pomalu a zpomaluje

  4. Jak mohu nastavit vlastní formát data a času v Oracle SQL Developer?