2016-08-05 26 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(); 
    } 

我需要插入一行並跳過所有重複:/*+ ignore_row_on_dupkey_index(CALLS,UNIQUE_CALLS_CONSTRAINT) */ /對此我使用SQLQuery

我的問題是:如何在不使用SQLQuery的情況下使用休眠模式?一般情況下正確實施。我有15個參數,我不希望它們都註冊SQLQuery

+0

我理解你想刪除重複的通話對象。這是否有可能通過像Set這樣的結構移除重複項,然後將其用於迭代而不是List?那是你需要的嗎? –

+0

@Ramachandran G有點不同。我每分鐘得到的列表可能包含已經在數據庫中的對象 – user5620472

+0

您是否評估過saveOrUpdate()是否可以幫助您處理重複項? –

回答