【问题标题】:@ManyToOne mapping with @JoinTable gets a foreign key constraint error@ManyToOne 与 @JoinTable 的映射得到外键约束错误
【发布时间】:2018-09-25 11:47:40
【问题描述】:

我有一个响应实体,每个响应只能有一个用户,每个用户可以有多个响应。我正在尝试通过使用@JoinTable 在响应实体中的查找表来连接它,如下所示:

@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;

但我无法删除用户。我收到以下错误:

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

我想要实现的是,当用户被删除时,它也会删除与该用户关联的所有内容。

【问题讨论】:

  • 你可以查看this问题,和你的问题一样
  • 不幸的是,这并不能解决我的错误:(

标签: hibernate spring-boot jpa spring-data-jpa hibernate-mapping


【解决方案1】:
public class Response {

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

您的用户实体应如下所示:

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

【讨论】:

  • 你知道为什么我得到的数据都是所有用户的回复吗?
  • 答案与问题相关。我不明白你为什么问?
猜你喜欢
  • 2020-09-14
  • 2018-06-12
  • 2011-06-12
  • 2022-01-16
  • 2018-08-31
  • 1970-01-01
  • 2018-02-19
  • 2021-02-14
相关资源
最近更新 更多