org.hibernate.TransactionException:获取数据时不支持嵌套事务
我使用以下代码从数据库中获取数据org.hibernate.TransactionException:获取数据时不支持嵌套事务,hibernate,Hibernate,我使用以下代码从数据库中获取数据 public Map fetchAll(int start, int pageSize, Long cid) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session.beginTransaction(); List<Expense> expense = null
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;
}
如何解决上述异常
上面的hibernate代码是正确的,应该有多少额外的+/-使这个代码完美
很少有其他方法抛出相同的异常,但在2,3请求之后,它们可以正常工作,如何解决此问题
我正在使用mysql数据库。您可以从session.beginTransaction更改事务;到session.getTransaction
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;
}
注意:这同样取决于您的数据库是否支持netsted事务我使用的是mysql数据库