什么会导致Hibernate InvalidStateException [英] What would cause an Hibernate InvalidStateException

查看:143
本文介绍了什么会导致Hibernate InvalidStateException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即使在我的模型类中没有验证约束(所有的成员变量都设置正确,但我仍然在创建对象时得到这个异常),我得到这个错误。

  javax.el.E​​LException:org.hibernate.validator.InvalidStateException:valida 
重置失败:com.mycompany.model.User
在org.jboss.el.util.ReflectionUtil.invokeMethod(ReflectionUtil.jav
a:339)
在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)
在org.jboss.el.parser.AstValue.invoke(AstValue.java:96)
在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)
在org.jboss.seam.navigation.Pages.preRender(Pages.java:331)
在org.jboss.seam.jsf .SeamPhaseListener.preRenderP年龄(SeamPhaseList
ener.java:561)
在org.jboss.seam.jsf.SeamPhaseListener.beforeRenderResponse(SeamPh
aseListener.java:472)
在org.jboss。 seam.jsf.SeamPhaseListener.beforeServletPhase(SeamPhas
eListener.java:148)
at org.jboss.seam.jsf.SeamPhaseListener.beforePhase(SeamPhaseListen
er.java:118)
在com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
在com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96)
在com。 sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:
139)
位于javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
位于org.apache。 catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica
FilterChain.java:206)
在org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamF
ilter.java:8 3)
在org.jboss.seam.web.RewriteFilter.doFilter(RewriteFilter.java:63)

在org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamF
ilter.java:69)
位于org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:4
0)
位于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)
在org.jboss.seam.servlet.SeamFilter $ FilterChainImpl.doFilter(SeamF
ilter.java:69)
at org.jboss.seam。 web.CharacterE ncodingFilter.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)
在org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
在o rg.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica
FilterChain.java:206)
,位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(Applica
FilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve。在org.jboss处调用(StandardWra
pperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardCon
textValve.java:191)
。 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。
进程(SecurityContextEstablishmentValve.java:126)
在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。
进程(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.ja
va:447)
at java .lang.Thread.run(Thread.java:619)
导致:org.hibernate.validator.InvalidStateException:验证失败
用于:com.mycompany.model.User 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.hiber nate.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)
在org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
在org.hibernate.ejb.Abst ractEntityManagerImpl.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(


解决方案

每个 InvalidStateException 有一个 InvalidValue 的数组。每个 InvalidValue 显示您想要坚持的bean的哪个属性被违反。正如@Arthur正确指出的那样,违反Java持久性注释最终也会出现在 InvalidStateException s中。



调试你的问题,我会暂时捕捉 com.mycompany.action.UserHome.persist 中的 InvalidStateException ,并将每个 InvalidValue 如下:

 } catch(InvalidStateException e){$ b $ (InvalidValue invalidValue:e.getInvalidValues()){
log.info(Bean class:+ invalidValue.getBeanClass()。getSimpleName()+
)的实例具有无效属性: + invalidValue.getPropertyName()+
,消息:+ invalidValue.getMessage()));
}
}


I get this error, even though there are no validation constraints in my model class (all of the member variables are set properly but I stil get this exception on object creation). How do I debug this error?

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(

解决方案

Each InvalidStateException has an array of InvalidValue. Each InvalidValue shows which property of the bean you want to persist is violated. As @Arthur pointed out correctly, violations of Java persistence annotations end up in InvalidStateExceptions, too.

To debug your problem, I would temporarily catch the InvalidStateException in com.mycompany.action.UserHome.persist and print out each InvalidValue as follows:

} 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()));
    }
}

这篇关于什么会导致Hibernate InvalidStateException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆