私が持っているいくつかのクラスが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
私はあなたが非重複への呼び出しオブジェクトたい理解しています。それは、Setのような構造体を使って重複を取り除いて、それをListよりも反復に使う可能性がありますか?それはあなたが必要とするものですか? –
@Ramachandran G少し違う。私が毎分受け取るリストには、すでにデータベースに入っているオブジェクトが含まれている可能性があります。 – user5620472
saveOrUpdate()が複製に役立つかどうか評価しましたか? –