我有一些類調用如何插入到沒有與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();
}
我需要插入一行並跳過所有重複:/*+ ignore_row_on_dupkey_index(CALLS,UNIQUE_CALLS_CONSTRAINT) */
/對此我使用SQLQuery
我的問題是:如何在不使用SQLQuery
的情況下使用休眠模式?一般情況下正確實施。我有15個參數,我不希望它們都註冊SQLQuery
我理解你想刪除重複的通話對象。這是否有可能通過像Set這樣的結構移除重複項,然後將其用於迭代而不是List?那是你需要的嗎? –
@Ramachandran G有點不同。我每分鐘得到的列表可能包含已經在數據庫中的對象 – user5620472
您是否評估過saveOrUpdate()是否可以幫助您處理重複項? –