Hibernate erreur: transaction en cours est annulée, les commandes ignoré jusqu'à la fin de la transaction de bloc
Je au hasard voir la même erreur dans le catalina.log:
WARNING: SQL Error: 0, SQLState: 25P02
Sep 8, 2010 11:50:13 PM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ERROR: current transaction is aborted, commands ignored until end of transaction block
org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.loader.Loader.doList(Loader.java:2223)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at PersistanceHelper.getTranslationByName(PersistanceHelper.java:174)
at SearchBean.getObject(SearchBean.java:146)
at org.apache.jsp.ajax.get_005fobject_jsp._jspService(get_005fobject_jsp.java:72)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
Je ne sais pas quelle est la raison de ce problème que je reçois au hasard et, normalement, la requête fonctionne très bien. m l'utilisation de Postgresql 8.3 et l'application est en JSF 2.0. Quelqu'un a déjà fait affaire avec une telle erreur? Quelle est la cause? Merci pour toutes les suggestions.
Je besoin d'ajouter que je ne fais que de la lecture des données de la base de données, mais ne mettez pas à jour ou d'insérer dans ces requêtes.
--------------------------------- modifier --------------------------------------
C'est un exemple de requête:
List object = null;
try {
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery("from Table where lower(translatedText) like lower('%" + term + "%') or lower(translatedAscii) like lower('%" + term + "%') or lower(originalAscii) like lower('%" + term + "%')");
object = (List<Table>) q.list();
} catch (Exception e)
{ e.printStackTrace(); }
return object; }
Je viens de remarquer ceci dans les logs du serveur tomcat:
Initial SessionFactory creation failed.java.lang.OutOfMemoryError: PermGen space
Pourrait-il en être la raison? Si je l'actualisation de la demande, il a tendance à fonctionner normalement pendant un certain temps.
Meilleures Salutations,
sass.
OriginalL'auteur sass | 2010-09-08
Vous devez vous connecter pour publier un commentaire.
Cela signifie probablement à certaines de vos interrogations n'ont pas été exécutés. Si vous avez beaucoup de requêtes dans la transaction, par exemple
et query2 déclenche une erreur, puis lorsque vous essayez d'exécuter query3 vous obtenez cette erreur.
Vous devez gérer les exceptions lancées depuis query2 et le gérer. Afficher une erreur de l'utilisateur, rollback de la transaction, n'essayez jamais d'exécuter query3.
Aussi regarder ici: http://www.faqs.org/docs/ppbook/x15040.htm
Mise à JOUR
Pour terminer la transaction:
Êtes-vous sûr qu'il n'y est qu'une seule requête dans une transaction? Êtes-vous sûr que vous êtes la création de la transaction avant que la requête et la finition après la requête d'annulation ou de s'engager). Êtes-vous sûr de finition de transaction si la requête throws exception (ne vous terminez l'opération en bloc finally)?
C'est un exemple:
Des objets de la liste = null; try { org.mise en veille prolongée.Transaction tx = session.beginTransaction(); Query q = session.createQuery("from Table where lower(translatedText) comme la réduction de l'('%" + terme + "%") ou inférieur(translatedAscii) comme la réduction de l'('%" + terme + "%") ou inférieur(originalAscii) comme la réduction de l'('%" + terme + "%')"); objet = (List<Table>) q.liste(); } catch (Exception e) { e.printStackTrace(); } return objet; }
Cet extrait de code me confond. Vous devez mettre le "rollback" dans le bloc d'exception au lieu de le "enfin", qui s'exécute toujours. Vous ne souhaitez reprendre si il y a une exception. Il pourrait être "sûr" de le faire de cette façon, mais il est conceptuellement de l'inclinaison. Aussi la finale de "catch" vraiment intercepte l'exception levée à partir de la restauration, depuis le "catch(Exception)" plus haut est tout autre chose. Alors, vraiment, vous obtenez seulement la renvoyer à partir de "rollback", ce qui signifie le début de la transaction, mais pas annulée. Ainsi le texte de l'exception est incorrect.
OriginalL'auteur amorfis