在ssh框架中要实现一个功能:先将查出一个集合数据,然后批量的修改集合中一个实体类中的一个字段,添加事物的处理,源代码如下:
public List<CrawlerConfigure> getIncrementCrawlerConfigure() {
List<CrawlerConfigure> configures = hbCrudDAO.getHibernateTemplate().findByNamedQuery("getIncrementCrawlerConfigure");//from CrawlerConfigure as o where o.flag = 0;
SessionFactory sessionFactory =hbCrudDAO.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
int i = 0;
for (CrawlerConfigure configure : configures) {
//将增量的标记为设置为1
configure.setFlag(1);
session.saveOrUpdate(configure);
i++;
if (i % 20 == 0) {
session.getTransaction().commit();
session.flush();
session.clear();
session.beginTransaction();
}
}
session.getTransaction().commit();
session.close();
return configures;
}
控制台的错误:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: illegally attempted to associate a proxy with two open Sessions
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:111)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:135)
at com.sun.proxy.$Proxy29.getIncrementCrawlerConfigure(Unknown Source)
at www.skiff.com.webservice.client.TestClient.main(TestClient.java:37)
解决方案:
public List<CrawlerConfigure> getIncrementCrawlerConfigure() {
String sql = "select * from ir_item.crawler_configure as o where o.flag = 0";
List result = null;
// List<CrawlerConfigure> configures = hbCrudDAO.getHibernateTemplate().findByNamedQuery("getIncrementCrawlerConfigure");
List<CrawlerConfigure> configures = null;
SessionFactory sessionFactory =hbCrudDAO.getSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.createSQLQuery(sql).addEntity(CrawlerConfigure.class);
configures = query.list();
System.out.println(configures.toString());
session.beginTransaction();
int i = 0;
for (CrawlerConfigure configure : configures) {
//将增量的标记为设置为1
configure.setFlag(1);
session.saveOrUpdate(configure);
i++;
if (i % 20 == 0) {
session.getTransaction().commit();
session.flush();
session.clear();
session.beginTransaction();
}
}
session.getTransaction().commit();
session.close();
return configures;
}