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

标签 java database hibernate

尝试使用 for 循环保存/提交数据,使用 hibernate 4.3.11.Final 和 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(); 时,我得到了

nested transactions not supported

  1. 我怎样才能完成我想要的(循环 5 次,每次向数据库中添加一个数据项)?
  2. 为什么提交只在这里运行一次?

最佳答案

当你写的时候

    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);
    }

关于java - For循环在Hibernate中保存数据而不添加所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023800/

相关文章:

sql - 保持 AUTO_INCREMENT 字段是不合适的设计?

java - hibernate 异常: identifier of an instance of X was altered when trying to merge object

java - Neo4j 存储具有大属性的节点时出现问题

java - 简单循环的速度

sql-server - 主键、唯一键和外键约束与索引之间有什么区别?

java - Hibernate继承,父类应该根据决策者是子类还是父类

java - 使用 SpringMVC + Hibernate @PersistenceContext 始终为 Null

java - 如何将通用 `Number` 用于 `Comparator.comparing`

java - 为什么 Hibernate 有时会加载错误子类的实例?

java - 访问服务器计算机上的数据库的 Android 应用程序