java - For循环在Hibernate中保存数据不添加所有项目
问题描述
尝试使用 for 循环使用带有 SQLite 方言的休眠 4.3.11.Final 保存/提交数据 com.enigmabridge:hibernate4-sqlite-dialect
当我运行此代码并检查 Sqlite 数据时,我看到它只保存了一项(似乎只提交一次),并且一项是我在数据库中看到的最后一项(我生成的 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();
}
}
但是当我进入tx = session.beginTransaction();
for 循环时,我得到
不支持嵌套事务
- 我怎样才能完成我想要的(循环 5 次,每次将数据项添加到数据库中)?
- 为什么 commit 在这里只运行一次?
解决方案
当你写
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);
}
推荐阅读
- r - 从 r 中的列中删除数字
- java - 在某个字符之后检索子字符串
- android - 如何在 exoplayer 播放列表中添加广告
- reactjs - 创建商店然后将值传递给 mapStateToProps 的问题
- c++ - 如何将运行时类传递给 AfxBeginThread
- mysql - 在 MySQL/MariaDB 中将记录更新/插入到高争用 InnoDB 表中的最佳方法是什么?
- javascript - 设置 html 表单值 - Delphi 10.4 中的 TEdgeBrowser
- django - 如何将 Django Rest APIView 字段暴露给招摇?
- python - 为什么 Pandas Dataframe(和 Python)有一个奇怪的浮点精度十进制值赋值会影响舍入?
- javascript - Ref 在浅渲染 Jest/Enzyme 期间返回 undefined