Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement;
issue is clear "Data too long for column 'password' at row 1"
in the example you use the UserService encrypts the password before saving the user.
here UserServiceImpl.class
@Override
public void save(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
user.setRoles(new HashSet<>(roleRepository.findAll()));
userRepository.save(user);
}
try this link to see the produced encrypted password and expand your column accordingly.
I hope this helps.
Blaze
Updated on June 24, 2022Comments
-
Blaze almost 2 years
I am following up this tutorial here http://hellokoding.com/registration-and-login-example-with-spring-xml-configuration-maven-jsp-and-mysql/ to create a registration and signup process using spring mvc and maven. I have created the relationship mapped to user_role between role table and user table. Everything seems to be fine, but when I try to create a new user the application throws error.
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; }
This is the pictoral representation of the relationship between role table to role_user table and user table to role_user table
Please why am I getting this error
Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement;
this is the 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)
Addition of more 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)
The above stacktrace occurs when I am trying to create a new user
Please what am I getting wrong? Many thanks
-
Blaze about 8 yearsSo what particular varchar length do you suggest I use on my db
-
Hisham Khalil about 8 yearshere explained : stackoverflow.com/questions/5881169/… and summary CHAR(60)
-
Blaze about 8 yearsI think my error has changed com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'accounts.user_role' doesn't exist
-
Hisham Khalil about 8 yearsdid you check your db?
-
Blaze about 8 yearsyeah, the table is there