当前位置: 首页 > 知识库问答 >
问题:

SQL错误:1452,SQLSTATE:23000无法添加或更新子行:外键约束失败

冯通
2023-03-14
@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:无法添加或更新子行:外键约束失败(mydbuser_role,约束fk_user_user_role_username)外键(username)引用

警告:org.hibernate.engine.jdbc.spi.sqlExceptionHelper-SQL错误:1452,SQLState:23000错误:org.hibernate.engine.jdbc.spi.sqlExceptionHelper-无法添加或更新子行:外键约束失败(mydbuser_role,约束fk_user_user_role_username)外键(username)引用user(异常:无法执行语句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表

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;

共有1个答案

公良安邦
2023-03-14

我找到了解决办法

因为我映射了一个指向唯一键的外键。我们需要告诉Hibernate您所引用的用户列(如果它不是主键的话)。为此,我们必须在第二个实体中添加referencedColumnName:

为了解决这个问题,我在userrole.java中添加了referencedColumnName=“username”

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false, referencedColumnName = "username")
private User user;
 类似资料:
  • 问题内容: 当我执行以下SQL命令时: 我收到以下错误消息: 我的桌子: 我研究了许多类似的案例,但找不到任何解决方案。任何帮助,将不胜感激。 问题答案: 为什么您获得的是异常的原因是因为你将在表中的记录,其中的价值是不存在的表。与相同的值也未显示在表上。 表格取决于表格:和 。所以,要确保在表中插入记录时,该值与存在于父表已经:和 。 尝试执行此查询,并确定将其插入。 SQLFiddle演示 我

  • 问题内容: 我试图在我的注释表中插入值,但出现错误。俗话说,我不能添加或更新子行,我也不知道这意味着什么。我的架构如下所示: 我尝试执行的mysql语句如下所示: 我得到的错误看起来像这样: SQLSTATE [23000]:违反完整性约束:1452无法添加或更新子行:外键约束失败(。,CONSTRAINT FOREIGN KEY()引用()删除无操作,更新无操作) 问题答案: 这仅表示在表 co

  • 问题内容: 我的数据库中有两个表: ; 。 有一个列引用了表的列。每当我试图做在上面的错误将显示和数据不会被保存。 问题答案: 听起来是在表之间您在数据库中具有外键约束。这意味着,在Course_id列中,您不能插入与外部表中的id不同的值。 上面的错误意味着当您发布数据时,外部字段为空或丢失。 查找内容:1.检查数据库中子表中的外部字段是否可以接受NULL。如果您具有带值的下拉列表,并且如果该字

  • 错误代码:1452。无法添加或更新子行:外键约束失败(.,约束外键()引用()) 我看过其他关于这个话题的帖子,但没有运气。我是不是在监督什么或者知道该怎么做?

  • 问题内容: 当我不想相互连接两个表时,我得到以下消息:#1452-无法添加或更新子行:外键约束失败....我想从facebook_users表格中连接oauth_uid2(主键)外键为oauth_uid2的错误列表。但是我总是得到这个信息。我已经清除了数据,但没有任何效果。在表users_facebook中,我还有1条记录。 1452-无法添加或更新子行:外键约束失败(。,在更新级联上删除级联时使

  • 当我不想将两个表相互连接时,我收到消息:#1452 - 无法添加或更新子行:外键约束失败....我想使用外键oauth_uid2将oauth_uid2(主键)从facebook_users选项卡连接到错误选项卡。但我总是收到这个信息。我已经清除了我的数据,但没有任何效果。同样在表中users_facebook我有 1 条记录。 1452-无法添加或更新子行:外键约束失败(., CONSTRAINT