Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да игнорирате дублиращи се редове при вмъкване

Опция за стил на базата данни

Hibernate не предлага добавяне на опция към своя insert into изявления. И не знам дали същата опция е налична за MS SQL.

Но ако намерите такава опция, можете да прихванете израза за вмъкване и да го добавите сами:

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

} 

Трябва да декларирате този прехващач във вашия persistence.xml :

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

Опция за стил JPA

Можете да запомните последния ред от последния синтактичен анализ (или да го извлечете от базата данни) и да пропуснете файла до този ред. В този случай дори ще спестите време за анализиране на всеки съществуващ елемент отново и отново.

От моя гледна точка това е JPA начинът, защото обикновено използвате базата данни само като хранилище и запазвате бизнес логиката в (Java) приложението.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. php:обръщане на ефектите на mysql_real_escape_string върху двоичен файл

  2. mysql централна/кръстосана заявка

  3. Грешка:mysqlnd не може да се свърже с MySQL 4.1+, използвайки старата несигурна автентификация

  4. Попълване на база данни без командата load data

  5. Как да запиша данни за сесията на PHP в база данни вместо във файловата система?