Java 如果记录不存在,则休眠插入

Java 如果记录不存在,则休眠插入,java,hibernate,hql,Java,Hibernate,Hql,如何使用Hibernate实现这一点?如果记录不存在,请插入它 我有以下专栏 Id(主键), 股票代码, 股票代码名称, 工业,, 部门 最近更新 如果字符串存在,我想检查“股票代码”列中的记录。如果该字符串不存在,则不执行任何操作。然后插入一个新行,其中包含Id、股票代码、股票名称、行业、行业和更新日期(今天的日期) 我甚至用下面的代码创建了一个新表 //Hibernate Create a Session Factory SessionFactory sessionFactory

如何使用Hibernate实现这一点?如果记录不存在,请插入它

我有以下专栏

Id(主键), 股票代码, 股票代码名称, 工业,, 部门 最近更新

如果字符串存在,我想检查“股票代码”列中的记录。如果该字符串不存在,则不执行任何操作。然后插入一个新行,其中包含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();
}
//Hibernate创建会话工厂
SessionFactory SessionFactory=新配置().configure().buildSessionFactory();
对于(int i=0;i
//休眠创建会话工厂
SessionFactory SessionFactory=新配置().configure().buildSessionFactory();
对于(int i=0;iif(tickerInfos.size()一个选项可以是在数据库中创建唯一约束,尝试更新,并在违反约束时捕获异常


更好的方法可能是混合使用已知添加的股票代码的本地缓存(假设从未删除过代码),这将减少数据库调用的数量。

感谢您现在尝试此方法。您不应该控制有异常的程序流。Joshua BlochI的《有效Java》第9章第57项认为这取决于什么情况是异常。如果99%的时间不存在异常,那么我们就可以捕获异常。例如optomistic检查。此外,反对异常的一个参数是因为开销,这与必须执行2个数据库调用相比算不了什么。这是一个很好的观点,但如果插入一组记录,其中包含一些存在的记录和一些不存在的记录,则效果相当差
 //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();