2016-04-24 4 views
3

Я следую этому руководству здесь http://hellokoding.com/registration-and-login-example-with-spring-xml-configuration-maven-jsp-and-mysql/ , чтобы создать процесс регистрации и регистрации с использованием весны mvc и maven. Я создал связь, сопоставленную с user_role между таблицей ролей и пользовательской таблицей. Все кажется прекрасным, но когда я пытаюсь создать нового пользователя, приложение выдает ошибку.Ошибка обработки запроса; Вложенное исключение - org.springframework.dao.DataIntegrityViolationException: невозможно выполнить оператор;

User.java

@ManyToMany 
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) 
    public Set<Role> getRoles() { 
     return roles; 
    } 

Role.java

@ManyToMany(mappedBy = "roles") 
    public Set<User> getUsers() { 
     return users; 
    } 

Это в pictoral представления о взаимосвязи между ролью таблицей для role_user таблицы и таблицы пользователя role_user таблицы enter image description here

Пожалуйста, почему я получаю эту ошибку Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement;

Это comlete StackTrace

HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 

Добавление дополнительной StackTrace

root cause 
org.hibernate.exception.DataException: could not execute statement 
    org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:69) 
    org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 
    org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:211) 


root cause 

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'password' at row 1 
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3845) 
    com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783) 
    com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447) 
    com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594) 
    com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545) 
    com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901) 
    com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2113) 
    com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2049) 
    com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2034) 

выше StackTrace происходит, когда я пытаюсь создать новый пользователь

Пожалуйста, что я делаю неправильно? Большое спасибо

+1

Добавьте полный StackTrace пожалуйста – Jens

+0

@Jens я совершаю что – Blaze

+0

@Jens я добавил полный StackTrace – Blaze

ответ

0

проблема ясна «данные слишком долго для столбца„пароль“в строке 1»

в примере вы используете UserService шифрует пароль перед сохранением пользователя.

здесь UserServiceImpl.class

@Override 
    public void save(User user) { 
     user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); 
     user.setRoles(new HashSet<>(roleRepository.findAll())); 
     userRepository.save(user); 
    } 

попробовать этот link, чтобы увидеть полученный зашифрованный пароль и расширить столбец соответственно.

Надеюсь, это поможет.

+0

Итак, какую конкретную длину varchar вы предлагаете использовать на моем db – Blaze

+0

здесь объяснено: http: // stackoverflow. com/questions/5881169/what-column-type-length-should-i-use-for-storing-a-bcrypt-hashed-password-in-ad и summary CHAR (60) –

+0

Я думаю, что моя ошибка изменилась. com. mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Таблица «accounts.user_role» не существует – Blaze

Смежные вопросы

 Смежные вопросы