sql >> Database >  >> RDS >> Mysql

Hoe dubbele rijen negeren bij invoegen

Optie databasestijl

Hibernate biedt niet aan om een ​​optie toe te voegen aan zijn insert into verklaringen. En ik weet niet of dezelfde optie beschikbaar is voor MS SQL.

Maar als je zo'n optie vindt, kun je de insert-instructie onderscheppen en die zelf toevoegen:

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

} 

U moet deze interceptor aangeven in uw persistence.xml :

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

JPA-stijloptie

U kunt de laatste regel van de laatste parsering onthouden (of ophalen uit de database) en het bestand tot die regel overslaan. In dat geval zou u zelfs de tijd besparen om elk bestaand item steeds opnieuw te ontleden.

Vanuit mijn oogpunt is dit de JPA-manier, omdat je de database meestal alleen als opslag gebruikt en de bedrijfslogica in de (Java) applicatie bewaart.




  1. SQL-sorteervolgorde op de volgorde die is opgegeven in de query

  2. Hoe te controleren of waarde bestaat in een MySQL-database

  3. SQL Server - vind het nde voorkomen in een string

  4. Fout:Client ondersteunt het door de server gevraagde authenticatieprotocol niet; overweeg om MySQL-client te upgraden