如何使用Hibernate执行此操作 - 如果记录不存在,请插入。
我有以下专栏
Id(主键), 自动收报机符号, 股票名称, 行业, 部门, LASTUPDATE
我想查看Ticker Symbol Column中的记录,如果该字符串存在则不执行任何操作(如果该字符串不存在)则插入带有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();
}
答案 0 :(得分: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();
}
答案 1 :(得分:0)
选项可以是在数据库中创建唯一约束,尝试更新,并在违反约束时捕获异常。
更好的方法可能是将此与已知添加的股票代码符号的本地缓存混合(假设从不删除符号),这应该减少到正在进行的数据库调用量。