2016-08-05 17 views
0

私が持っているいくつかのクラスがHibernateで重複行なしでoracleに挿入するにはどうすればよいですか?

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

は私がList of Calls

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

を取得し、私は行を挿入し、すべての重複をスキップする必要が

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

DB

に挿入しようとした各分呼び出し: /*+ ignore_row_on_dupkey_index(CALLS,UNIQUE_CALLS_CONSTRAINT) */ /私はそれを使用します SQLQuery

私の質問は、SQLQueryを使わずに休止状態を使ってこれをどうすればいいですか?一般に正しく実装されているためです。私は15個のパラメータを持っていると私はあなたが見る、基準によってOracleのヒントを使用することができますSQLQuery

+0

私はあなたが非重複への呼び出しオブジェクトたい理解しています。それは、Setのような構造体を使って重複を取り除いて、それをListよりも反復に使う可能性がありますか?それはあなたが必要とするものですか? –

+0

@Ramachandran G少し違う。私が毎分受け取るリストには、すでにデータベースに入っているオブジェクトが含まれている可能性があります。 – user5620472

+0

saveOrUpdate()が複製に役立つかどうか評価しましたか? –

答えて

関連する問題