Issue regarding foreign key constraint

0 votes

I have 3 entities Role, Users and UserAssignedRoles. I have OneToMany bidirectional relation between Users and UserAssignedRoles and Roles and UserAssigned Roles respectively. On firing the spring boot app, It throws an error

java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (examserver.user_assigned_roles, CONSTRAINT FKkh4a308jmt2dwrbmohjlsxbrd FOREIGN KEY (role_fk) REFERENCES roles (role_id))

can anyone help me pointing where I did wrong. the code of entities are here as follows. 

Users.java

package com.examserver.entities;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.GetMapping;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Table(name = "USERS")
@Entity
@Getter
@Setter
@AllArgsConstructor
public class Users implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private int id;
    @Column(name = "first_name")
    private String fname;
    @Column(name = "last_name")
    private String lname;
    @Column(name = "user_name")
    private String username;
    @Column(name = "Email")
    private String email;
    @Column(name = "Password")
    private String password;
    @Column(name = "Is_Profile_Active")

    private boolean active = true;

    @Column(name = "Contact_Number")
    private String phoneNo;
    @Column(name = "User_Description")
    private String about;
    @Column(name = "Profile_Image")
    private String dp;



    @OneToMany(mappedBy = "user",cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JsonIgnore
    Set<UserAssignedRoles> usersList = new HashSet<>();

    public Set<UserAssignedRoles> getUsersList() {
        return usersList;
    }

    public void setUsersList(Set<UserAssignedRoles> usersList) {
        this.usersList = usersList;
    }

    public Users() {
    }
    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        Set<Authority> set = new HashSet<>();
        this.usersList.forEach(userAssignedRoles ->
                set.add(new Authority(userAssignedRoles.getRole().getRoleName())));

        return set;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

}
and Role.java
package com.examserver.entities;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.Set;

@Table(name = "ROLES")
@Entity
@Setter
@Getter
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "Role_Id")
    private int roleId;

    @Column(name = "Role_Name")
    private String roleName;

    @OneToMany(mappedBy = "role",fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<UserAssignedRoles> userAssignedRolesSet;

    public Set<UserAssignedRoles> getUserAssignedRolesSet() {
        return userAssignedRolesSet;
    }

    public void setUserAssignedRolesSet(Set<UserAssignedRoles> userAssignedRolesSet) {
        this.userAssignedRolesSet = userAssignedRolesSet;
    }

    public Role(){

    }

    public Role(int roleId, String roleName, Set<UserAssignedRoles> userAssignedRolesSet) {
        this.roleId = roleId;
        this.roleName = roleName;
        this.userAssignedRolesSet = userAssignedRolesSet;
    }
}
and UserAssignedRole.java
package com.examserver.entities;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.List;

@Table(name = "USER_ASSIGNED_ROLES")
@Entity
@Getter
@Setter
public class UserAssignedRoles {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int userRoleId;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name ="Role_FK")
    private Role role;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "User_FK")
    private Users user;


}
Jul 9, 2021 in Java by anonymous

edited 5 days ago 9 views

No answer to this question. Be the first to respond.

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
webinar REGISTER FOR FREE WEBINAR X
REGISTER NOW
webinar_success Thank you for registering Join Edureka Meetup community for 100+ Free Webinars each month JOIN MEETUP GROUP