Tli*_*ink 1 java database hibernate
尝试使用Hibernate 4.3.11.Final和SQLite方言使用for循环保存/提交数据 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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我tx = session.beginTransaction();在for循环中移动时,我得到
不支持嵌套交易
当你写
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);
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |