org.hibernate.TransactionException:获取数据时不支持嵌套事务
Posted
技术标签:
【中文标题】org.hibernate.TransactionException:获取数据时不支持嵌套事务【英文标题】:org.hibernate.TransactionException: nested transactions not supported while fetching data 【发布时间】:2014-11-28 09:52:35 【问题描述】:我正在使用以下代码从数据库中获取数据。
public Map fetchAll(int start, int pageSize, Long cid)
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
List<Expense> expense = null;
long count = 0;
try
count = (Long) session.createQuery("select count(*) from Expense where client.id=:cid")
.setParameter("cid", cid).uniqueResult();
String hql = "select s from Expense s where s.client.id=:cid order by adddate desc ";
Query query = session.createQuery(hql).setFirstResult(start).setMaxResults(pageSize);
query.setParameter("cid", cid);
expense = query.list();
tx.commit();
catch (HibernateException e)
LogError.log(new Throwable().getStackTrace()[0].getClassName(), new Throwable().getStackTrace()[0].getMethodName(), "", e.toString());
if (tx != null)
e.printStackTrace();
Map data = new HashMap();
data.put("list", expense);
data.put("count", count);
return data;
此代码抛出以下异常:
org.hibernate.TransactionException: nested transactions not supported
org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:154)
org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1435)
sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:356)
com.sun.proxy.$Proxy17.beginTransaction(Unknown Source)
iland.expense.ExpenseDAO.fetchAll(ExpenseDAO.java:167)
iland.expense.ExpenxeAction.fetchAll(ExpenxeAction.java:171)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
如何解决上述异常。
以上休眠代码是正确的,应该有什么额外的 +/- 以使此代码完美。
很少有其他方法会抛出相同的异常,但在 2,3 次请求后它们可以正常工作如何解决此问题。
我正在使用mysql数据库。
【问题讨论】:
【参考方案1】:您可以将交易从session.beginTransaction();
更改为session.getTransaction();
注意:同样取决于您的数据库是否支持 netsted 事务
【讨论】:
我正在使用mysql数据库以上是关于org.hibernate.TransactionException:获取数据时不支持嵌套事务的主要内容,如果未能解决你的问题,请参考以下文章