Erro com o Hibernate mergin e o Hibernate Validate

2 respostas
W

Estou usando no meu projeto o hibernate validator e algumas de minhas variáveis usam as anotações dessa API.

@Entity  
public class Usuario {  
  
@Id @GeneratedValue  
private Long id;  
  
@NotEmpty  
private String nome;  
  
@NotEmpty @Size(min = 2, max = 32)  
private String login;  
  
@NotEmpty @Size(min = 3, max = 16)  
private String senha;

A senha por exemplo, não pode ser nula ao criar um usuário, mas na hora de atualizar, eu não mando a senha pelo formulário. Mas quando tento dá o merge dá um erro.

session.merge(object);  
transaction.commit();

Esse object é um objeto do tipo usuário que vem do formulário só com alguns parâmetros preenchidos, a senha no caso nem vem do formulário, mas quando tenta fazer o merge dá o seguinte erro:

javax.validation.ConstraintViolationException: validation failed for classes [br.com.grupofortes.intranet.model.administracao.Usuario] during update time for groups [javax.validation.groups.Default, ]

at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:132)

at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreUpdate(BeanValidationEventListener.java:79)

at org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:236)

at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:87)

at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:26

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:180)

at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)

at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)

at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)

at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)

at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)

at br.com.grupofortes.intranet.dao.impl.GenericDaoImpl.update(GenericDaoImpl.java:67)

at br.com.grupofortes.intranet.controller.administracao.UsuarioController.update(UsuarioController.java:81)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:89)

at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.grupofortes.intranet.interceptor.LoginInterceptor.intercept(LoginInterceptor.java:34)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:4

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)

at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)

at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)

at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:23)

at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)

at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:5

at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:12

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Thread.java:619)

Isso acontece porque alguns parâmetros estão nulos ao tentar salvar no banco. Então, como eu poderia resolver isso continuando usando o Hibernate Validator?

2 Respostas

D

Primeiro você precisa entender que o merge é o mesmo que um update do SQL e que um update do SQL significa DELETE seguido de INSERT. Se a validação bloqueia nulls para insert, a validação será ativada.
Sugestão, embora menos seguro, seria manter a senha no objeto da sessão e enviar a mesma junto, quando o objeto for atualizado.

S

Voce consegui resolver?
Estou com o mesmo problema…segue

Caused by: javax.validation.ConstraintViolationException: Validation failed for classes [br.com.teste.entidade.EntradaProduto] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
	ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=itemEntrada, rootBeanClass=class br.com.teste.entidade.EntradaProduto, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'}
]

ta faltando algum jar?

Criado 4 de janeiro de 2012
Ultima resposta 15 de fev. de 2012
Respostas 2
Participantes 3