VRaptor e Hibernate Validator

2 respostas
P

Pessoal,

Estou seguindo a apostila FJ-28 da Caelum.

Estou terminando o capítulo 8, onde é inserida a validação utilizando o hibernate validator.

Até então estava tudo funcionando perfeitamente, exclusão, alteração e inserção. Depois de inseridas as anotations do validator, configurado o vraptor.xml e tudo mais que a apostila manda fazer, a validação funciona, e não consigo inserir uma música sem nome por exemplo, porém a exclusão não funciona mais.

O erro é o seguinte:

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: not-null property references a null or transient value: br.com.caelum.lojavirtual.modelo.Cd.titulo
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:95)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


root cause 

org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.caelum.lojavirtual.modelo.Cd.titulo
	org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
	org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:250)
	org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:141)
	org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
	org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:766)
	org.hibernate.impl.SessionImpl.delete(SessionImpl.java:744)
	br.com.caelum.lojavirtual.dao.DAO.remove(DAO.java:27)
	br.com.caelum.lojavirtual.logic.CdLogic.remove(CdLogic.java:43)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:117)
	org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:37)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:131)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:58)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	br.com.caelum.lojavirtual.logic.DAOInterceptor.intercept(DAOInterceptor.java:17)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	br.com.caelum.lojavirtual.logic.AutorizadorInterceptor.intercept(AutorizadorInterceptor.java:26)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:38)
	org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:90)
	org.vraptor.core.DefaultController.execute(DefaultController.java:42)
	org.vraptor.VRaptorServlet.service(VRaptorServlet.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.


--------------------------------------------------------------------------------

Apache Tomcat/6.0.14

e no log do Tomcat é o seguinte:

13:49:13,671 DEBUG SessionImpl:220 - opened session at timestamp: [telefone removido]
13:49:13,671 DEBUG JDBCTransaction:54 - begin
13:49:13,671 DEBUG ConnectionManager:421 - opening JDBC connection
13:49:13,671 DEBUG DriverManagerConnectionProvider:93 - total checked-out connections: 2
13:49:13,671 DEBUG DriverManagerConnectionProvider:109 - opening new JDBC connection
13:49:13,703 DEBUG DriverManagerConnectionProvider:115 - created connection to: jdbc:mysql://localhost/vraptor, Isolation Level: 4
13:49:13,703 DEBUG JDBCTransaction:59 - current autocommit status: false
13:49:13,703 DEBUG JDBCContext:210 - after transaction begin
13:49:13,718 DEBUG DefaultDeleteEventListener:76 - entity was not persistent in delete processing
13:49:13,718 DEBUG IdentifierValue:104 - id unsaved-value: null
13:49:13,718 DEBUG DefaultDeleteEventListener:213 - deleting [br.com.caelum.lojavirtual.modelo.Cd#20]
13:49:13,718 DEBUG SessionImpl:1308 - setting cache mode to: GET
13:49:13,718 DEBUG SessionImpl:1308 - setting cache mode to: NORMAL
26/09/2007 13:49:13 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet vraptor2 threw exception
org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.caelum.lojavirtual.modelo.Cd.titulo
	at org.hibernate.engine.Nullability.checkNullability(Nullability.java:72)
	at org.hibernate.event.def.DefaultDeleteEventListener.deleteEntity(DefaultDeleteEventListener.java:250)
	at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:141)
	at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
	at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:766)
	at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:744)
	at br.com.caelum.lojavirtual.dao.DAO.remove(DAO.java:27)
	at br.com.caelum.lojavirtual.logic.CdLogic.remove(CdLogic.java:43)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:117)
	at org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:37)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:131)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:58)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at br.com.caelum.lojavirtual.logic.DAOInterceptor.intercept(DAOInterceptor.java:17)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at br.com.caelum.lojavirtual.logic.AutorizadorInterceptor.intercept(AutorizadorInterceptor.java:26)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:38)
	at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
	at org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:90)
	at org.vraptor.core.DefaultController.execute(DefaultController.java:42)
	at org.vraptor.VRaptorServlet.service(VRaptorServlet.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	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:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	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:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

Se alguém puder me ajudar agradeço, ja que estou apanhando disso ja fazem algumas horas e não encontrei solução em lugar nenhum.

Valew

2 Respostas

thiagogmenezes

Fala Paulo,

isso acontece porque qnd vc vai utilizar a lógica remover da sua classe CdLogic ele verifica que o campo titulo está vazio, ou seja o campo que vc quis que não fosse vazio…

para resolver esse problema vc deve ir dentro do seu metodo remover na classe CdLogic e inserir o metodo produra do DAOCd antes de chamar o metodo de remover… no meu codigo ficou assim:

public void remove(Cd cd){
		cd = this.daoFactory.getCdDAO().procura(cd.getId());
		this.daoFactory.beginTransaction();
		this.daoFactory.getCdDAO().remove(cd);
		this.daoFactory.commit();		
}

espero ter ajudado…

abraço

P

Cara…

demorou alguém que pudesse me ajudar nessa hein…

Mas valew mesmo cara… vou testar isso ai assim que possivel…

Valew

Criado 26 de setembro de 2007
Ultima resposta 14 de mar. de 2008
Respostas 2
Participantes 2