【发布时间】:2021-03-25 23:56:23
【问题描述】:
我在从数据库中删除相关实体时遇到问题。我有一个交易应用程序,用户可以在其中发布交易并表达他们对其他人交易的兴趣。
当用户删除其帐户时,该用户发布的所有交易和表达的兴趣都应从数据库中删除。但是,后者似乎不起作用(我也不确定第一个是否起作用,因为我不知道它们以什么顺序执行)。我得到了错误:
DELETE 语句与 REFERENCE 约束“FKq9kr60l7n7h3yf82s44rkoe4g”冲突。冲突发生在数据库“dbi438161_i438161”、表“dbo.interests”、列“user_id”中。
注意:当我尝试删除交易时,我得到了同样的结果,但列是“trade_id”
我对用户的交易和角色做同样的事情,所以我认为这与我感兴趣的实体有关。我正在使用 CascadeType.ALL 注释让 Hibernate 删除相关实体
用户中的相关实体列表:
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="user_roles",
joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "role_id") })
private List<Role> roles = new ArrayList<>();
@Transient
@JsonIgnore
@OneToMany(cascade=CascadeType.ALL, mappedBy="user")
private List<Interest> interests = new ArrayList<>();
@Transient
@JsonIgnore
@OneToMany(cascade=CascadeType.ALL, mappedBy="user")
private List<Trade> trades = new ArrayList<>();
兴趣实体:
@Entity
@Table(name = "interests")
public class Interest {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int interestId;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
@ManyToOne
@JoinColumn(name = "trade_id", nullable = false)
private Trade trade;
private String comment;
public Interest(User user, Trade trade, String comment) {
this.user = user;
this.trade = trade;
this.comment = comment;
}
public Interest(){
}
}
为了比较,贸易实体:
@Entity
@Table(name = "trades")
public class Trade {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="trade_id")
private int tradeId;
@Column(name="wants")
private String wants;
@Column(name="offers")
private String offers;
@Column(name="date_last_modified")
private LocalDateTime lastModified;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
@Transient
@JsonIgnore
@OneToMany(cascade=CascadeType.ALL, mappedBy="trade")
private List<Interest> interests = new ArrayList<>();
public Trade(String wants, String offers, User user){
this.wants = wants;
this.offers = offers;
this.user = user;
}
public Trade() {
}
}
有人知道我在这里做错了什么吗?提前致谢
【问题讨论】:
标签: java sql-server spring-boot hibernate cascade