Erste “org.hibernate.TransactionException: geschachtelte Transaktionen nicht unterstützt" Fehler beim löschen
Beim laufen removeUserFromConference Methode immer diese exception:
04/06/2012 00:20:48 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [ConferenceServlet] in context with path [/conf4u] threw exception
org.hibernate.TransactionException: nested transactions not supported
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:152)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1396)
at sun.reflect.GeneratedMethodAccessor39.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
at $Proxy12.beginTransaction(Unknown Source)
at daos.ConferenceDao.isConferenceNameExists(ConferenceDao.java:129)
at servlets.ConferenceServlet.removeUser(ConferenceServlet.java:232)
at servlets.ConferenceServlet.processRequest(ConferenceServlet.java:79)
at servlets.ConferenceServlet.doPost(ConferenceServlet.java:433)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
04/06/2012 00:27:15 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/conf4u] has started
04/06/2012 00:27:15 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/conf4u] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
04/06/2012 00:27:15 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/conf4u] is completed
Dao-Methode:
public void removeUserFromConference(Conference conference, User user) {
ConferencesUsers conferenceUser = getConferenceUser(conference, user);
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.delete(conferenceUser);
session.getTransaction().commit();
}
Die model-Klasse:
@Entity
@Table( name = "Conferences_Users" )
public class ConferencesUsers implements Serializable {
private static final long serialVersionUID = -3401337605668111437L;
private Conference conference;
private User user;
private int userRole;
private UserAttendanceStatus attendanceStatus;
private boolean notifiedByMail;
ConferencesUsers() {} //not public on purpose!
public ConferencesUsers(Conference conf, User user, int userRole) {
this.conference = conf;
this.user = user;
this.userRole = userRole;
this.attendanceStatus = null;
this.notifiedByMail = false;
}
public ConferencesUsers(Conference conf, User user, int userRole, UserAttendanceStatus attendanceStatus, boolean notifiedByMail) {
this.conference = conf;
this.user = user;
this.userRole = userRole;
this.attendanceStatus = attendanceStatus;
this.notifiedByMail = notifiedByMail;
}
@Id
@ManyToOne(cascade = CascadeType.ALL)
public Conference getConference() {
return conference;
}
public void setConference(Conference conference) {
this.conference = conference;
}
@Id
@ManyToOne(cascade = CascadeType.ALL)
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Enumerated(EnumType.STRING)
public int getUserRole() {
return userRole;
}
public void setUserRole(int userRole) {
this.userRole = userRole;
}
@Nullable
public boolean isNotifiedByMail() {
return notifiedByMail;
}
public void setNotifiedByMail(boolean notifiedByMail) {
this.notifiedByMail = notifiedByMail;
}
public UserAttendanceStatus getAttendanceStatus() {
return attendanceStatus;
}
public ConferencesUsers setAttendanceStatus(UserAttendanceStatus attendanceStatus) {
this.attendanceStatus = attendanceStatus;
return this;
}
}
- Bitte aktualisieren Sie die Ziel-Datenbank verwendet (ohne zu Graben, durch die post, um es zu finden), z.B. tags und eventuell Titel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie wahrscheinlich begonnen haben, eine Transaktion, und zu versuchen zu beginnen, ein anderes zimmerreserviereung, ohne das Sie begangen oder rollbacked die Vorherige. Die Redewendung, wenn die Verwendung programmgesteuerter Transaktion Abgrenzung ist die folgende:
Dies ist umständlich und fehleranfällig, und dies ist einer der Gründe, warum EJBs oder Spring zu haben deklarative Transaktionen ist so nützlich.
Erstens, sollten Sie injizieren die hibernateProperties, hibernate.current_session_context_class,
dann können Sie getCurrentSession() auf, um die CurrentSession.
Ich habe das gleiche problem vor. First run:
wenn die Abfrage etwas von:
dieselbe Ausnahme wird ausgelöst, auf den zweiten
beginTranscation
. Ich löste es, indemstatt
sowohl in der Abfrage und speichern.
Was Sie hier Tat :
ist tatsächlich versucht, eine Sitzung geöffnet haben, ohne es zu schließen.
Ist es mir passiert und ich Stand vor dem gleichen problem und was ich gemacht habe ist :
und es waren nicht "Ruhezustand Geschachtelten Transaktion Nicht Unterstützt Fehler" wieder angehoben ...
Konnte ich es lösen, mit dem folgenden code:
Versuchen Sie schließlich, um zu schließen Sie Ihre Hibernate-session, wie diese:
Ich dieses problem lösen erstellen von verschiedenen Sitzungen mit
diese Zeile "session.beginTransaction();" verhindert werden, dass mehrere Transaktionen, so entfernen Sie diese Zeile, und versuchen da in der select-Abfrage ist es nicht nötig, aber es code, der nicht funktioniert nach dem entfernen dieser am Ende dann dieser code hinzufügen " - Sitzung.rollback();".