2010-11-01 4 views
13

Ich bekomme diesen Fehler, obwohl es keine Validierung Einschränkungen in meiner Modellklasse gibt (alle Mitglied Variablen sind richtig eingestellt, aber ich bekomme diese Ausnahme bei der Erstellung von Objekten). Wie debugge ich diesen Fehler?Was würde einen Hibernate verursachen InvalidStateException

javax.el.ELException: org.hibernate.validator.InvalidStateException: valida 
tion failed for: com.mycompany.model.User 
     at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.jav 
a:339) 
     at org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.jav 
a:280) 
     at org.jboss.el.parser.AstMethodSuffix.getValue(AstMethodSuffix.jav 
a:59) 
     at org.jboss.el.parser.AstMethodSuffix.invoke(AstMethodSuffix.java: 
65) 
     at org.jboss.el.parser.AstValue.invoke(AstValue.java:96) 
     at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.ja 
va:276) 
     at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:175) 
     at org.jboss.seam.navigation.Pages.callAction(Pages.java:703) 
     at org.jboss.seam.navigation.Pages.preRender(Pages.java:331) 
     at org.jboss.seam.jsf.SeamPhaseListener.preRenderPage(SeamPhaseList 
ener.java:561) 
     at org.jboss.seam.jsf.SeamPhaseListener.beforeRenderResponse(SeamPh 
aseListener.java:472) 
     at org.jboss.seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhas 
eListener.java:148) 
     at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListen 
er.java:118) 
     at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214) 
     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96) 
     at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java: 
139) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter 
(ApplicationFilterChain.java:290) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica 
tionFilterChain.java:206) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:83) 
     at org.jboss.seam.web.RewriteFilter.doFilter(RewriteFilter.java:63) 

     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:4 
0) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java 
:90) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java 
:64) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:4 
5) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.jboss.seam.web.CharacterEncodingFilter.doFilter(CharacterEnc 
odingFilter.java:42) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java 
:206) 
     at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290 
) 
     at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(Ba 
seFilter.java:388) 
     at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515) 
     at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:5 
6) 
     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) 

     at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamF 
ilter.java:69) 
     at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter 
(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica 
tionFilterChain.java:206) 
     at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHea 
derFilter.java:96) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter 
(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica 
tionFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWra 
pperValve.java:235) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardCon 
textValve.java:191) 
     at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Se 
curityAssociationValve.java:190) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authe 
nticatorBase.java:433) 
     at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContex 
tValve.java:92) 
     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve. 
process(SecurityContextEstablishmentValve.java:126) 
     at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve. 
invoke(SecurityContextEstablishmentValve.java:70) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostVa 
lve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportVa 
lve.java:102) 
     at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(Ca 
chedConnectionValve.java:158) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngi 
neValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapte 
r.java:330) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor 
.java:829) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler. 
process(Http11Protocol.java:598) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.ja 
va:447) 
     at java.lang.Thread.run(Thread.java:619) 
Caused by: org.hibernate.validator.InvalidStateException: validation failed 
for: com.mycompany.model.User   at org.hibernate.validator.event.ValidateEventListener.validate(Val 
idateEventListener.java:148) 
     at org.hibernate.validator.event.ValidateEventListener.onPreInsert(
ValidateEventListener.java:172) 
     at org.hibernate.action.EntityIdentityInsertAction.preInsert(Entity 
IdentityInsertAction.java:142) 
     at org.hibernate.action.EntityIdentityInsertAction.execute(EntityId 
entityInsertAction.java:65) 
     at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 
     at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrR 
eplicate(AbstractSaveEventListener.java:321) 
     at org.hibernate.event.def.AbstractSaveEventListener.performSave(Ab 
stractSaveEventListener.java:204) 
     at org.hibernate.event.def.AbstractSaveEventListener.saveWithGenera 
tedId(AbstractSaveEventListener.java:130) 
     at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGenerat 
edId(EJB3PersistEventListener.java:49) 
     at org.hibernate.event.def.DefaultPersistEventListener.entityIsTran 
sient(DefaultPersistEventListener.java:154) 
     at org.hibernate.event.def.DefaultPersistEventListener.onPersist(De 
faultPersistEventListener.java:110) 
     at org.hibernate.event.def.DefaultPersistEventListener.onPersist(De 
faultPersistEventListener.java:61) 
     at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645) 

     at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619) 
     at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623) 
     at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEnti 
tyManagerImpl.java:220) 
     at sun.reflect.GeneratedMethodAccessor454.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethod 
AccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.jboss.seam.persistence.EntityManagerInvocationHandler.invoke 
(EntityManagerInvocationHandler.java:46) 
     at $Proxy550.persist(Unknown Source) 
     at org.jboss.seam.framework.EntityHome.persist(EntityHome.java:84) 
     at com.mycompany.action.UserHome.persist(
+1

der Nutzer Entität angezeigt helfen könnte. –

Antwort

22

Jeder InvalidStateException ein Array hat einrichten von InvalidValue. Jeder InvalidValue zeigt, welche Eigenschaft der Bean, die Sie beibehalten möchten, verletzt wird. Wie @Arthur richtig ausgeführt hat, enden Verletzungen von Java-Persistenz-Annotationen auch in InvalidStateException s.

Ihr Problem debuggen, ich würde die InvalidStateException in com.mycompany.action.UserHome.persist und drucken jedes InvalidValue vorübergehend fangen wie folgt:

} catch (InvalidStateException e) { 
    for (InvalidValue invalidValue : e.getInvalidValues()) { 
     log.info("Instance of bean class: " + invalidValue.getBeanClass().getSimpleName() + 
       " has an invalid property: " + invalidValue.getPropertyName() + 
       " with message: " + invalidValue.getMessage())); 
    } 
} 
+0

geben versuchen – Sam

+0

Dank dieser half mir, den Fehler zu finden (eine kurze Variable wurde ein String-Wert in einem Fehlerzustand gesetzt). vielen Dank – Sam

1

Wenn Sie wollen, dass diese leicht zu debuggen, können Sie erzeugen/implementieren eine toString() Methode, und das Objekt drucken, bevor Sie spülen.

Auf diese Weise können Sie sehen, ob einige Ihrer Eigenschaften fehlen oder einige Validierungsfehler vorliegen.

+0

Ich habe das Objekt gedruckt, es sieht gut aus, wenn alle Mitglieder richtig eingestellt sind. – Sam

+0

Dann zeigen Sie uns bitte die User-Entity, und auch den Ausdruck des Objekts –

3

Ich bin ziemlich sicher, dass es von einem Zuhörer standardmäßig registriert verursacht wird

at org.hibernate...ValidateEventListener.onPreInsert(ValidateEventListener.java) 
at org.hibernate...EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java) 

einfach die hibernate.validator.autoregister_listeners Eigenschaft als falsch

hibernate.validator.autoregister_listeners=false 
+0

Ja, der (Hibernate) Validator ist als Listener registriert. Aber warum würde es eine Entität ohne Validierungsbeschränkung ablehnen? –

+0

@Pascal Thivent Hi Pascal, auch wenn Sie keine einfachen HibernateValidator-Annotationen verwenden, kann es Ihre Entität validieren, wenn Sie beispielsweise eine * @ -Spalte (Länge = 10) * haben. Sie können es versuchen, indem Sie * session.persist (yourEntity) * –

+0

Ahhh, sehr guter Punkt! –