提交事务时出错

时间:2017-01-16 15:08:26

标签: java hibernate

您好,在验证用户表单时遇到Hibernate问题。验证本身是有效的,方法将用户添加到数据库没有验证工作,但结合在一起给了我javax.persistence.RollbackException:提交事务时出错。我找不到任何解决办法。

这是我的域类:

@Entity
public class User {

@Id
@GeneratedValue
private long id ;


@Pattern(regexp= "[a-zA-Z ]+", message="{pattern.user.name.validation}")
private String name;

@Size(min=5, message="{pattern.user.password.validation}")
private String password;

@Pattern(regexp="[a-zA-Z0-9.!#$%&’*+=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)" , message="{pattern.user.email.validation}")
@UserEmail
private String email;

@Pattern(regexp= "[a-zA-Z0-9./ ]{4,60}", message="{pattern.user.address.validation}")
private String address;

@Pattern(regexp="[0-9-]{7,14}" , message="{pattern.user.tele.validation}")
private String telephone;

@Pattern(regexp="[0-9-/]{8,10}" , message="{pattern.user.birth.validation}")
private String birth;

这是存储库:

@Repository
public class JpaUserRepository implements UserRepository {

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myDB");

public boolean checkEmail(String email) {

    EntityManager entityManager = entityManagerFactory.createEntityManager();

    javax.persistence.Query query = entityManager.createQuery("select name from User where email=:check");

    query.setParameter("check", email);

    String test = query.getResultList().toString();

    if (test.equalsIgnoreCase("[]")) {

        entityManager.close();
        return false;

    }

    else {

        entityManager.close();
        return true;
    }

}


public void createUser(User user) {

    EntityManager createManager =       entityManagerFactory.createEntityManager();

    createManager.getTransaction().begin();

    System.out.println(user);

    createManager.persist(user);

    createManager.getTransaction().commit();

    createManager.close();

}

}

这是验证界面:

public class UserEmailValidator implements ConstraintValidator<UserEmail,String>{

@Autowired UserService userservice;

public void initialize(UserEmail constraintAnnotation) {

}


public boolean isValid(String value, ConstraintValidatorContext context) {



    if(userservice.checkEmail(value)==false)
        {
            System.out.println("valid ok");
            return true;
        }
        System.out.println("valid not ok");
            return false;

}}

和控制器:

@Controller
public class UserController {

@Autowired
private UserService userService;

@RequestMapping(value = "/signup", method = RequestMethod.GET)
public String signUp(Model model) {
    User newUser = new User();
    model.addAttribute("newUser", newUser);

    return "registration";
}

@RequestMapping(value = "/signup", method = RequestMethod.POST)
public String signUpProcess(@ModelAttribute("newUser") @Valid User newUser,BindingResult result, Model model, 
        HttpServletRequest request) {

    if (result.hasErrors()) {

        return "registration";
    }

    userService.createUser(newUser);

    model.addAttribute("name", newUser.getName());

    return "accountSuccess";
}}

异常

org.springframework.web.util.NestedServletException: Request processing   failed; nested exception is javax.persistence.RollbackException: Error while committing the transaction
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

 javax.persistence.RollbackException: Error while committing the transaction
       org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:86)
   com.michal.carRental.repository.jpa.JpaUserRepository.createUser(JpaUserRepository.java:55)
com.michal.carRental.service.jpa.JpaUserService.createUser(JpaUserService.java:25)
   com.michal.carRental.controller.UserController.signUpProcess(UserController.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.springframework.web.method.support.InvocableHandlerMethod.invoke(Invocabl   eHandlerMethod.java:215)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForReques    t(InvocableHandlerMethod.java:132)
   org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

   javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.
org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:311)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:180)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:124)
org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351)
org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303)
org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133)
org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:114)
org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:78)
org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:205)
org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:82)
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:447)
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:333)
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:335)
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1224)
org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:464)
org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:2894)
org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2270)
org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:485)
org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:146)
org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38)
org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:230)
org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:65)
org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:61)
com.michal.carRental.repository.jpa.JpaUserRepository.createUser(JpaUserRepository.java:55)
com.michal.carRental.service.jpa.JpaUserService.createUser(JpaUserService.java:25)
com.michal.carRental.controller.UserController.signUpProcess(UserController.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.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

 root cause

  java.lang.NullPointerException
com.michal.carRental.validator.UserEmailValidator.isValid(UserEmailValidator.java:25)
com.michal.carRental.validator.UserEmailValidator.isValid(UserEmailValidator.java:1)
org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:308)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:180)
org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:124)
org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387)
org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351)
org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303)
org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133)
org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:114)
org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:78)
org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:205)
org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:82)
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:447)
org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:333)
org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:335)
org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)
org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1224)
org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:464)
org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:2894)
org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2270)
org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:485)
org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:146)
org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38)
org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:230)
org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:65)
org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:61)
com.michal.carRental.repository.jpa.JpaUserRepository.createUser(JpaUserRepository.java:55)
com.michal.carRental.service.jpa.JpaUserService.createUser(JpaUserService.java:25)
com.michal.carRental.controller.UserController.signUpProcess(UserController.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.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

0 个答案:

没有答案