4

如何使用 Hibernate 执行此操作 - 如果记录不存在,请插入它。

我有以下列

Id(主键)、股票代码、股票代码名称、行业、部门、LastUpdate

如果字符串存在,我想检查代码符号列中的记录,如果字符串不存在则不执行任何操作,然后插入一个新行,其中包含 Id、代码符号、代码名称、行业、部门和更新日期(今天的日期)。

我已经用下面的代码创建了一个新表。

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

2 回答 2

3
 //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();
于 2013-09-01T13:18:33.520 回答
0

一个选项可能是在您的数据库中创建一个唯一约束,尝试更新,并在违反约束时捕获异常。

更好的方法可能是将其与已知添加的股票代码的本地缓存混合(假设从未删除符号),这应该减少正在进行的数据库调用量。

于 2013-09-01T13:48:45.993 回答