Hibernate查询list()时报java.util.ConcurrentModificationException

ijse 2011-01-28 04:10:54
下面是我的代码:
	@SuppressWarnings("unchecked")
public List<?> get(String hql, Object[] args) {
Session s = sf.getCurrentSession();
List<T> rslt = null;
Transaction ts = s.beginTransaction();
try {
Query q = s.createQuery(hql);
for (int i = 0; i < (args == null ? 0 : args.length); ++i) {
q.setParameter(i, args[i]);
}
s.flush();
rslt = (List<T>)(q.list());
// ts.commit();
} catch (HibernateException e) {
ts.rollback();
log.error("从数据库中获取所有数据时出错!", e);
e.printStackTrace();
}
// if(rslt == null)
// throw new RecordNotFoundException();
return rslt;
}


以下是详细出错信息:

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$ValueIterator.next(HashMap.java:822)
at org.hibernate.pretty.Printer.toString(Printer.java:113)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:120)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at cn.ijser.DAO.Impl.BaseDAO.get(BaseDAO.java:136)
at cn.ijser.Services.UserGroupService.getByName(UserGroupService.java:91)
at cn.ijser.InitDataTest.insertUser(InitDataTest.java:123)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)



诡异的是:有时候我DEBUG一步一步,就不会出错,而直接运行基本总会出这个错。。在网上也查了半天,无果。

怎么办呢?
...全文
159 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ijse 2011-01-29
  • 打赏
  • 举报
回复
求解释,求怎样用延迟加载 。。
wang_darui 2011-01-28
  • 打赏
  • 举报
回复
不错的资料!
ijse 2011-01-28
  • 打赏
  • 举报
回复
	public List<T> get(String hql, Object[] args) {
List<T> rslt = new ArrayList<T>();
Session s = sf.getCurrentSession();
Transaction ts = s.beginTransaction();
try {
Query q = s.createQuery(hql);
for (int i = 0; i < (args == null ? 0 : args.length); ++i) {
q.setParameter(i, args[i]);
}
for(Iterator<T> it = q.iterate(); it.hasNext();) {
rslt.add(it.next());
}
// rslt = (List<T>)(q.list());
// ts.commit();
} catch (HibernateException e) {
ts.rollback();
log.error("从数据库中获取所有数据时出错!", e);
e.printStackTrace();
}
// if(rslt == null)
// throw new RecordNotFoundException();
return rslt;
}


采用这种方式便可以,谁能给解释下呢?
ijse 2011-01-28
  • 打赏
  • 举报
回复
就是q.list()的时候出错,就在这里。再深入就进Hibernate的源码了,我实在没办法了。求救哎

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧