2013-09-01 81 views
0

如何使用Hibernate執行此操作 - 如果記錄不存在,請插入它。如果記錄不存在,則插入Hibernate

我有以下幾列

ID(主鍵), 股票代碼, 北京時間名稱, 行業, 部門, LASTUPDATE

我想檢查,在股票代碼欄記錄如果字符串存在,如果它不存在,則不做任何操作,然後插入一個包含Id,Ticker Symbol,Ticker Name,Industry,Sector和Update Date(今天的日期)的新行。

我已經盡力用下面的代碼創建一個新表。

//Hibernate Create a Session Factory  
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();   
for (int i = 0; i < Bloomberg.getTickerSymbol().size(); i++){ 

      //Hibernate to store Stock Tickers Data  
     tickerInfo.setTickerSymbol(Bloomberg.getTickerSymbol().get(i)); //Symbol 
     tickerInfo.setTickerName(Bloomberg.getTickerName().get(i)); //Name 
     tickerInfo.setTickerSector(Bloomberg.getTickerSector().get(i)); //Sector 
     tickerInfo.setTickerIndustry(Bloomberg.getTickerIndustry().get(i)); //Industry 
     tickerInfo.setTickerLastUpdate(Calendar.getInstance().getTime()); //Update Date 

     org.hibernate.Session session = sessionFactory.openSession(); 
     session.beginTransaction(); 
     session.saveOrUpdate(tickerInfo); 
     session.getTransaction().commit(); 
     session.close(); 
} 

回答

1
//Hibernate Create a Session Factory  
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();   
for (int i = 0; i < Bloomberg.getTickerSymbol().size(); i++){ 

     //Hibernate to store Stock Tickers Data  
    tickerInfo.setTickerSymbol(Bloomberg.getTickerSymbol().get(i)); //Symbol 
    tickerInfo.setTickerName(Bloomberg.getTickerName().get(i)); //Name 
    tickerInfo.setTickerSector(Bloomberg.getTickerSector().get(i)); //Sector 
    tickerInfo.setTickerIndustry(Bloomberg.getTickerIndustry().get(i)); //Industry 
    tickerInfo.setTickerLastUpdate(Calendar.getInstance().getTime()); //Update Date 

    org.hibernate.Session session = sessionFactory.openSession(); 
    List tickerInfos = session.createCriteria(TickerInfo.class).add(Restrictions.eq("tickerSymbol", Bloomberg.getTickerSymbol().get(i))).list(); 
    if(tickerInfos.size()<1){ 
     session.beginTransaction(); 
     session.saveOrUpdate(tickerInfo); 
     session.getTransaction().commit(); 
    } 
    session.close(); 
} 
+0

謝謝你現在就試試這個。 – cloudviz

+0

感謝您的更新 – Prabhakaran

0

一種選擇可能是在你的數據庫中創建一個唯一約束,嘗試更新,並捕捉異常,如果違反約束。

一個更好的方法可能是將其與已知添加的股票代碼符號的本地緩存(假設符號從未刪除)混合,這應該減少到正在進行的數據庫調用的數量。

+1

您不應該通過例外來控制程序流程。 Joshua Bloch在Effective Java第9章​​中的第57項 – szegedi

相關問題