Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie doppelte Zeilen beim Einfügen ignorieren

Datenbankstil-Option

Hibernate bietet nicht an, eine Option zu seinem insert into hinzuzufügen Aussagen. Und ich weiß nicht, ob die gleiche Option für MS SQL verfügbar ist.

Aber wenn Sie eine solche Option finden, können Sie die Insert-Anweisung abfangen und selbst hinzufügen:

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

} 

Sie müssen diesen Interceptor in Ihrer persistence.xml deklarieren :

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

JPA-Stiloption

Sie könnten sich die letzte Zeile aus der letzten Analyse merken (oder sie aus der Datenbank abrufen) und die Datei bis zu dieser Zeile überspringen. In diesem Fall würden Sie sogar die Zeit sparen, jedes vorhandene Element immer wieder neu zu analysieren.

Aus meiner Sicht ist dies der JPA-Weg, da man die Datenbank meist nur als Speicher nutzt und die Geschäftslogik in der (Java-)Anwendung behält.