我试图通过hibernate从数据库中检索数据。但我得到" org.hibernate.TransactionException:不支持嵌套事务"刷新jsp页面时出现异常。有时候我能够得到结果,但有时候我会超越异常。我在代码中只使用了一次beginTransaction()方法。但仍然得到例外。可能是根本原因。
My code is :
StringBuilder sb = new StringBuilder();
sb.append("{").append(STATUS).append(OK).append(", ").append(RESULTS);
sb.append("[");
if(session == null){
return getErrorMsgJson("Failed to get DB Session");
}
try {
session.beginTransaction();
ListIterator iterator3 = session.createSQLQuery(sqlStr).list().listIterator();
int t=0;
while(iterator3.hasNext()){
Object obj;
Object obj3[]=null;
if((obj=iterator3.next()) instanceof BigInteger){
sb.append("\"");
sb.append(obj.toString());
sb.append("\"");
break;
}
else{
obj3 = (Object[])iterator3.previous();
for(int i=0;i<obj3.length;i++){
sb.append("\"");
sb.append(obj3[i].toString());
sb.append("\"");
if(t<obj3.length){
sb.append(",");
}
}
}
iterator3.next();
t++;
}
//session.getTransaction().commit();
sb.append("] }");
return sb.toString();
}
catch (Exception e) {
//Log.logErr(Logc.JS, Logc.JS_INTERNAL_ERR, "Exception while getting DB Connection");
//out.println("Exception while getting DB Connection");
//return getErrorMsgJson(e.getClass().getName()+" : "+e.getMessage());
//return getErrorMsgJson(e.getClass()+" "+e.getMessage());
//e.printStackTrace();
return getErrorMsgJson(e.getClass()+" : "+e.getMessage());
}
提前致谢。
答案 0 :(得分:0)
您没有关闭会话,因此使用了许多不受支持的交易。
您最终可以阻止并关闭其中的会话。
try{
//your code
}catch(Exception e){
}finally{
session.close();
}
<强>更新强> 解决了事务性异常后。 您正在获得GenericJDBCException。在这里创建SQLQuery但是您需要指定实体表示该表所代表的实体。
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Employee.class);
Iterator itr = query.list().listIterator();