Search code examples
hibernatespring-bootjpaspring-data-jpahibernate-mapping

@ManyToOne mapping with @JoinTable gets a foreign key constraint error


I have a Response entity and every response can have only one user and every user can have many responses. I'm trying to connect it by a lookup table using @JoinTable in Response entity like this:

@ManyToOne()
@JoinTable(
        name = "response_user",
        joinColumns = @JoinColumn(name = "response_id"),
        inverseJoinColumns = @JoinColumn(name = "user_id")
)
@JsonIgnoreProperties({ "firstName", "lastName", "email", "activated", "regDate", "lastVisit" })
private User user;

but I can't delete a user. I'm getting the following error:

Cannot delete or update a parent row: a foreign key constraint fails (`database`.`response_user`, CONSTRAINT `FKf48he1fef6q4d4t3kw4605pfw` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))

What I would like to achieve is that when the user is deleted, it also deletes everything associated with that user.


Solution

  • public class Response {
    
        @ManyToOne
        @JoinTable(name="response_user",
                   joinColumns={@JoinColumn(name="response_id")},
                   inverseJoinColumns={@JoinColumn(name="user_id")})
        private User user;
    }
    

    Your User Entity should look like this:

    public class User {
        @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) 
        @JsonIgnore
        private Collection<Response> responses;
    }