Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment ignorer les lignes en double lors de l'insertion

Option de style de base de données

Hibernate ne propose pas d'ajouter d'option à son insert into déclarations. Et je ne sais pas si la même option est disponible pour MS SQL.

Mais si vous trouvez une telle option, vous pouvez intercepter l'instruction d'insertion et l'ajouter vous-même :

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

} 

Vous devez déclarer cet intercepteur dans votre persistence.xml :

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

Option de style JPA

Vous pouvez vous souvenir de la dernière ligne de la dernière analyse (ou la récupérer dans la base de données) et ignorer le fichier jusqu'à cette ligne. Dans ce cas, vous gagneriez même du temps pour analyser chaque élément existant encore et encore.

De mon point de vue, c'est la méthode JPA, car vous utilisez généralement la base de données uniquement comme stockage et conservez la logique métier dans l'application (Java).