sql >> Database teknologi >  >> RDS >> Mysql

Hvordan ignorerer dublerede rækker, når du indsætter

Databasestilmulighed

Hibernate tilbyder ikke at tilføje en mulighed til dets insert into udsagn. Og jeg ved ikke, om den samme mulighed er tilgængelig for MS SQL.

Men hvis du finder en sådan mulighed, kan du opsnappe insert-sætningen og tilføje det selv:

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;
  }

} 

Du skal erklære denne interceptor i din persistence.xml :

<property name="hibernate.ejb.interceptor" value="...IgnoreRowOnDupInterceptor" />

JPA-stilmulighed

Du kunne huske den sidste linje fra den sidste parsing (eller hente den fra databasen) og springe filen over indtil den linje. I så fald ville du endda spare tid til at parse alle eksisterende elementer igen og igen.

Fra mit synspunkt er dette JPA-måden, fordi du normalt kun bruger databasen som lagring og beholder forretningslogikken i (Java)-applikationen.




  1. Få optegnelser over den aktuelle måned

  2. oktober 2014CPU crasher ArcGIS Desktop

  3. 4 måder at få information om en tabels struktur i SQLite

  4. Dynamisk SQL resulterer i midlertidig tabel i SQL Stored procedure