sql >> Databasteknik >  >> RDS >> Mysql

Hur ignorera dubbletter av rader när du infogar

Databasstilsalternativ

Hibernate erbjuder inte att lägga till ett alternativ till dess insert into uttalanden. Och jag vet inte om samma alternativ är tillgängligt för MS SQL.

Men om du hittar ett sådant alternativ kan du avlyssna insert-satsen och lägga till det själv:

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 måste deklarera denna interceptor i din persistence.xml :

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

JPA-stilalternativ

Du kan komma ihåg den sista raden från den senaste analysen (eller hämta den från databasen) och hoppa över filen till den raden. I så fall skulle du till och med spara tid för att analysera alla befintliga objekt om och om igen.

Ur min synvinkel är detta JPA-sättet, eftersom du vanligtvis bara använder databasen som lagring och behåller affärslogiken i (Java)-applikationen.




  1. Lagra GUID i MySQL från C#

  2. Hur man får aktuellt datum och tid (utan tidszon) i T-SQL

  3. Topp 7 jobb som kräver SQL

  4. SQL WHERE-sats som matchar värden med efterföljande mellanslag