【发布时间】:2015-12-06 22:40:57
【问题描述】:
我使用 spring、hibernate 和 mysql 创建了一个 web 应用程序。我有两个表用户,user_role。 user 表中的用户名是唯一的,在 user_role 表中它是一个外键。
当我尝试在 user_role 表中插入数据时,出现以下异常。但我可以在 mysql 中手动插入记录。
当我将用户名作为用户表中的主键时,它工作得很好。将用户名更改为唯一并将 user_id 更改为主要后,我收到此异常(请参阅下面的表结构)
@Override
public boolean addProfile(User user) {
UserRole userRole = new UserRole();
userRole.setRole("ROLE_USER");
userRole.setUser(user);
boolean status = false;
try {
this.sessionFactory.getCurrentSession().save(user);
this.sessionFactory.getCurrentSession().save(userRole); //getting exception here
status = true;
我在保存userRole. this.sessionFactory.getCurrentSession().save(userRole) 时遇到以下异常;
例外
调试:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 不能 执行语句 [n/a] com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: 无法添加或更新子行:外键约束失败 (
mydb.user_role, 约束fk_user_user_role_username外国 KEY (username) 参考user(username) ON 删除 无操作 ON 更新无操作)警告:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL 错误: 1452,SQL 状态:23000 错误: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 无法添加或 更新子行:外键约束失败 (
mydb.user_role, 约束fk_user_user_role_username外国 KEY (username) 参考user(username) ON 删除 无操作 ON 更新无操作)错误:com.javaworkspace.nn.dao.impl.RegisterDAOImpl - org.hibernate.exception.ConstraintViolationException:无法执行语句 DEBUG: org.hibernate.engine.transaction.spi.AbstractTransactionImpl - 提交
用户表
user_id int(11) NO PRI auto_increment
username varchar(100) NO UNI
password varchar(60) NO
用户角色表
user_role_id int(11) NO PRI auto_increment
username varchar(100) NO MUL
role varchar(45) NO
User.java
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id", unique = true, nullable = false)
private String userId;
@Column(name = "USERNAME", unique = true, nullable = false, length = 100)
private String username;
UserRole.java
@Entity
@Table(name = "user_role", catalog = "mydb", uniqueConstraints = @UniqueConstraint(columnNames = {
"role", "username" }))
public class UserRole {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "user_role_id", unique = true, nullable = false)
private Integer userRoleId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
private User user;
@Column(name = "role", nullable = false, length = 45)
private String role;
【问题讨论】:
标签: mysql spring hibernate constraints sqlexception