2010-11-01 11 views
13

Ricevo questo errore, anche se non ci sono vincoli di validazione nella mia classe modello (tutte le variabili membro sono impostate correttamente ma ottengo questa eccezione per la creazione dell'oggetto). Come faccio a eseguire il debug di questo errore?Cosa causerebbe un Hibernate 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

Mostrando l'entità utente potrebbe aiutare. –

risposta

22

Ogni InvalidStateException ha una matrice di InvalidValue. Ogni InvalidValue mostra quale proprietà del bean che si desidera mantenere viene violato. Come @Arthur sottolineato correttamente, violazioni della Java Persistence annotazioni finiscono in InvalidStateException s, anche.

per eseguire il debug problema, vorrei momentaneamente prendere il InvalidStateException in com.mycompany.action.UserHome.persist e stampare ogni InvalidValue come segue:

} 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

proveremo questo – Sam

+0

grazie a questo mi ha aiutato a trovare l'errore (una variabile breve veniva impostata un valore di stringa in una condizione di errore). grazie mille – Sam

1

Se si desidera eseguire il debug facilmente questo, è possibile generare/implementare un metodo toString(), e stampare l'oggetto prima di essere Flushing.

In questo modo si può vedere se alcune delle vostre proprietà sono mancanti, o avere alcuni errori di convalida.

+0

Ho stampato l'oggetto, mi sembra perfetto con tutti i membri impostati correttamente. – Sam

+0

Quindi si prega ci mostrano l'entità utente, e anche la stampa dell'oggetto –

3

io sono abbastanza sicuro che è causata da un listener registrato per default

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

Basta impostare le hibernate.validator.autoregister_listeners proprietà come falsa

hibernate.validator.autoregister_listeners=false 
+0

Sì, la (ibernazione) validatore è registrato come ascoltatore. Ma perché dovrebbe rifiutare un'entità senza alcun vincolo di validazione? –

+0

@Pascal Thivent Hi Pascal, anche quando non si utilizza le annotazioni HibernateValidator semplici, può convalidare il soggetto se si dispone di qualcosa come * @ Colonna (lunghezza = 10) *, per esempio. Si può provare utilizzando * session.persist (yourEntity) * –

+0

Ahhh, molto buon punto! –

Problemi correlati