2016-08-05 19 views
0

Ich habe einige Klasse AnrufeWie in Oracle ohne doppelte Zeilen mit Hibernate einzufügen?

public class Calls { 
private String Field1; 
//and many fields, for example 15 
private List<MyModel> models; 
} 

Jede Minute, die ich ein List of Calls

List<Calls> list = someService.getCallsList(); 

bekommen und versuchen, es in DB einfügen

Session session = getSession(); 
    Transaction tx = session.beginTransaction(); 

    for(int i=0; i< list.size(); i++) { 
     Calls calls = list.get(i); 
     session.createSQLQuery(
"INSERT /*+ ignore_row_on_dupkey_index(CALLS,UNIQUE_CALLS_CONSTRAINT) */ " + 
     "INTO CALLS(Field1,....,FieldEnd) VALUES(:field1,...,:fieldEnd)") 
    .setParameter("field1",calls.getField1() 
    //set all params 
    .setParameter("fielEnd1",calls.getFieldEnd(); 
       if (i % 20 == 0) { //20, same as the JDBC batch size 
        //flush a batch of inserts and release memory: 
        session.flush(); 
        session.clear(); 
       } 
      } 
      tx.commit(); 
      session.close(); 
    } 

Ich brauche Reihe zu setzen und doppelte überspringen : /*+ ignore_row_on_dupkey_index(CALLS,UNIQUE_CALLS_CONSTRAINT) *//Dafür verwende ich SQLQuery

Meine Frage ist: Wie kann ich dies mit Hibernate ohne SQLQuery machen? wie im Allgemeinen korrekt implementiert ist. I 15 Parameter haben, und ich will sie nicht alle registrieren für SQLQuery

+0

Ich verstehe Sie wollen Deduplizierung Anrufe Objekt. Ist das eine Möglichkeit, dass Duplikate durch eine Struktur wie Set entfernt werden und diese dann für eine Iteration als eine Liste verwenden? Ist das was du brauchst? –

+0

@Ramachandran G Ein bisschen anders. Liste, die ich jede Minute bekomme, kann Objekte enthalten, die sich bereits in der Datenbank befinden – user5620472

+0

Haben Sie bewertet, ob saveOrUpdate() Ihnen bei den Duplikaten helfen wird? –

Antwort