【发布时间】: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数据库。
【问题讨论】:
标签: hibernate