【发布时间】:2018-10-06 00:29:48
【问题描述】:
尝试使用 for 循环使用 hibernate 4.3.11.Final 和 SQLite 方言保存/提交数据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(); 时,我得到了
不支持嵌套事务
- 我怎样才能完成我想要的(循环 5 次,每次向数据库中添加一个数据项)?
- 为什么commit在这里只运行一次?
【问题讨论】:
-
我知道它可能会令人困惑,但我将其包含在内是因为我理解它的方式是 JDBC 始终存在,在低级别,Hibernate 构建在它之上。我认为 JPA 是一种规范,而 Hibernate 是一种实现(EclipseLink 的方式),我们使用 JPA 注释。不想反驳我的标签会让人感到困惑,只是想指出原因。
-
你说得对,这个问题是一个休眠问题。但是我的 BroadcastItem 类有
javax.persistence.*导入。这里的答案为我清除了一切:stackoverflow.com/questions/15040583/…