2011-01-12 5 views
1

최대 절전 모드 및 MySQL 데이터베이스를 사용하는 Java/Spring MVC 3 응용 프로그램이 있습니다. 내 컨트롤러에서 나는이 소스 코드가 있습니다javax.validation.ConstraintViolationException : 그룹의 업데이트 시간 동안 클래스에 대한 유효성 검사가 실패했습니다.

Set<ConstraintViolation<Person>> failures = validator.validate(p); 
if (failures.isEmpty()) { 
    Project project = this.projectService.findProjectById(projectid); 
    Person newPerson = this.personService.addPerson(p); 

    Set<Person> persons = this.personService.getAllPersonsByProjectId(projectid); 
    persons.add(newPerson); 
    project.setPersons(persons); 
    Set<ConstraintViolation<Project>> failures1 = validator.validate(project); 
    if (!failures1.isEmpty()) { 
     System.out.println("ERROR"); 
    } else { 
     System.out.println("NO ERROR"); 
    } 

    this.projectService.updateProject(project); 
    return Collections.singletonMap("person", newPerson); 
} 

프로젝트와 사람은 다 대다 관계가 @manytomany로 주석하고 프로젝트 매핑 소유자입니다. 새 사람이 추가되었지만 this.projectService.updateProject(project); 줄에 오류가 발생합니다. 그것은 다오 최대 절전 모드 구현에서이 작업을 수행하는 것 :

public void updateProject(Project p) { 
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
    Session sess = sessionFactory.getCurrentSession(); 
    Transaction tx = sess.beginTransaction(); 
    sess.update(p); 
    tx.commit(); 
} 

그것은 라인 tx.commit();에 실패했습니다. if (!failures1.isEmpty()) {으로 확인하면 프로젝트에 오류가 없다는 것을 알 수 있습니다.

여기에 무슨 문제가 있습니까? 왜 내 프로젝트의 유효성 검사가 있습니까? 나는 검증 방법을 부르지 않았다 ... 그래서 org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate()이있는 이유는 무엇입니까?

누군가가이 문제를 해결할 수 있도록 도와주세요.

최고 감사합니다. 여기

전체 오류 스택 추적 다음 @Pattern없이

@NotNull 
@Size(min = 1, max = 255) 
@Pattern(regexp="(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])", 
     message="{my.email.error.message}") 
private String email; 

: 오류가 발생하는 프로젝트를 업데이트하기 전에

13.01.2011 00:06:36 org.apache.catalina.core.ApplicationDispatcher invoke 
SERVE: Servlet.service() for servlet project3 threw exception 
javax.validation.ConstraintViolationException: validation failed for classes [com.mydomain.myproject.domain.Person] during update time for groups [javax.validation.groups.Default, ] 
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:155) 
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreUpdate(BeanValidationEventListener.java:102) 
at org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:235) 
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:86) 
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185) 
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:1216) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) 
at com.mydomain.myproject.dao.impl.ProjectDaoImplHibernate.updateProject(ProjectDaoImplHibernate.java:44) 
at com.mydomain.myproject.service.impl.ProjectServiceImpl.updateProject(ProjectServiceImpl.java:39) 
at com.mydomain.myproject.controller.ProjectPersonController.addPerson(ProjectPersonController.java:189) 
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 org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195) 
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
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:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
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:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Thread.java:619) 

13.01.2011 00:06:36 org.apache.catalina.core.StandardWrapperValve invoke 
SERVE: Servlet.service() for servlet default threw exception 
javax.validation.ConstraintViolationException: validation failed for classes [com.mydomain.myproject.domain.Person] during update time for groups [javax.validation.groups.Default, ] 
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:155) 
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreUpdate(BeanValidationEventListener.java:102) 
at org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:235) 
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:86) 
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185) 
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:1216) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) 
at com.mydomain.myproject.dao.impl.ProjectDaoImplHibernate.updateProject(ProjectDaoImplHibernate.java:44) 
at com.mydomain.myproject.service.impl.ProjectServiceImpl.updateProject(ProjectServiceImpl.java:39) 
at com.mydomain.myproject.controller.ProjectPersonController.addPerson(ProjectPersonController.java:189) 
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 org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646) 
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) 
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) 
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) 
at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195) 
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159) 
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) 
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) 
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
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:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
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:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Thread.java:619) 

UPDATE , 나는이 주석 한 사람을 추가 오류 없음 ... 그래서, 여기서 뭐가 잘못 되었나요?

UPDATE-2 :

나 최대 절전 모드 3.6.0.Final을 사용하고 난 내 메이븐의 pom.xml에 다음이 있습니다

<!-- JSR 303 with Hibernate Validator --> 
<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.0.0.GA</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>4.1.0.Final</version> 
</dependency> 
+0

I 갱신 m 이 정보를 가지고 질문하십시오. – Tim

+0

제 질문에 대한 나의 업데이트에서 나는 이미 그것을 대답했다 :'Hibernate 3.6.0.Final' – Tim

+0

'flag'에 무엇을 써야합니까? 그리고 왜이 Hibernate의 것들이,'import javax.validation.constraints.Pattern;'을 수입 했습니까? 그리고'regexp' 대신'regex'를 사용하면 에러가납니다. – Tim

답변

2

같은뿐만 아니라 플래그를 설정하십시오 : @Pattern(regexp=..., flags={Flag.CASE_INSENSITIVE}) 플래그

더 상세 :
http://jackson.codehaus.org/javadoc/bean-validation-api/1.0/javax/validation/constraints/Pattern.Flag.html

+0

''플래그에 대해 무엇을 써야합니까? 왜이 최대 절전 모드의 것들이 나는''javax.validation.constraints.Pattern''을 수입 했습니까? 그리고'regexp' 대신'regex'를 사용하면 에러가납니다. – Tim

+1

좋아요, 그렇지만 깃발은 어떻게해야합니까? Ah, 나는 3.6.0.Final -> 같은 에러의 Hibernate insteaf의 3.6.1-SNAPSHOT을 테스트했다. 그러나 다음과 같은 추가 메시지를 얻었다 : 제약 조건 위반 목록 : [\t ConstraintViolationImpl {interpolatedMessage = 'MyErrorMessage', propertyPath = email , rootBeanClass = class com.mydomain.myproject.domain.Person, messageTemplate = '{my.email.error.message}'} ]'오류가 발생하는 것은 분명히 패턴입니다. – Tim

+0

속성에 정의되어 있지만 무시할 수 있습니다. 왜냐하면 메시지가 없기 때문에 오류가 발생하기 때문입니다.'@ NotNull'과 @ Size가 이미 주석 처리되어 있기 때문에 제 질문을 업데이트했습니다. – Tim

관련 문제