For循环在Hibernate中保存数据而不是添加所有项目

问题描述 投票:1回答:1

尝试使用for循环来保存/提交数据使用hibernate 4.3.11.Final with SQLite Dialect com.enigmabridge:hibernate4-sqlite-dialect

当我运行此代码并检查Sqlite数据时,我看到它只保存了1个项目(似乎它只提交了一次)并且一个项目是我在数据库中看到的最后一个项目(我生成的5个项目) 。

configureSessionFactory();
Session session = null;
Transaction tx=null;
try {
    session = sessionFactory.openSession();
    SyndEntry entry = null;
    URL feedUrl = new URL(rssUrl);
    SyndFeedInput input = new SyndFeedInput();
    SyndFeed feed = input.build(new XmlReader(feedUrl));
    tx = session.beginTransaction();
    BroadcastItem item = new BroadcastItem();
    for (int i = 0 ; i < 5 ; i++) {
         entry = (SyndEntry) feed.getEntries().get(i);
         item.setMessage(entry.getTitle());
         item.setLinkUrl(entry.getLink());
         session.save(item);
    }
    tx.commit();
} catch (Exception ex) {
  ex.printStackTrace();
  // Rolling back the changes to make the data consistent in case of any failure in between multiple database write operations.
   tx.rollback();
} finally{
  if(session != null) {
      session.close();
  }
}

但是当我在for循环中移动tx = session.beginTransaction();时,我得到了

不支持嵌套事务

  1. 我怎样才能完成我想要的东西(循环5次,每次都将数据项添加到数据库中)?
  2. 为什么提交只在这里运行一次?
java database hibernate
1个回答
4
投票

当你写作

    BroadcastItem item = new BroadcastItem();

    for (int i = 0 ; i < 5 ; i++) {
        entry = (SyndEntry) feed.getEntries().get(i);

        item.setMessage(entry.getTitle());
        item.setLinkUrl(entry.getLink());

        session.save(item);
    }

你第一次保存(创建)你的item,而对于你的循环的其他时间,你保存(更新)你的item

你只需要在循环中创建你的BroadcastItem,如下所示:

    for (int i = 0 ; i < 5 ; i++) {
        entry = (SyndEntry) feed.getEntries().get(i);
        BroadcastItem item = new BroadcastItem();

        item.setMessage(entry.getTitle());
        item.setLinkUrl(entry.getLink());

        session.save(item);
    }
© www.soinside.com 2019 - 2024. All rights reserved.