【发布时间】:2021-09-09 15:40:51
【问题描述】:
我有与 Day Entity 相关的 User Entity 和 OneToMany 映射。我正在尝试删除用户实体并使用 CascadeType.REMOVE 删除它的天数。但是当我以这种方式使用 sql 查询时,级联不起作用
Query theQuery =
currentSession.createQuery(
"delete from User where id=:userId");
theQuery.setParameter("userId", id);
theQuery.executeUpdate();
现在,当我尝试以这种方式删除用户时,级联工作并且它的日子也被删除了:
Session currentSession = entityManager.unwrap(Session.class);
user gets deleted
User theUser = findById(id);
currentSession.remove(theUser);
这是用户实体映射
@Entity
@Table(name="user")
public class User {
@Column(name="first_name")
private String first_name ;
@Column(name="last_name")
private String last_name ;
@OneToMany(mappedBy = "user", cascade = {CascadeType.REMOVE})
List<Day> days;
}
这是我的 Day Entity 映射
@Entity
@Table(name = "day")
public class Day {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id ;
@Column(name = "date")
Date date ;
@ManyToOne()
@JoinColumn(name = "user_id")
User user ;
}
这是我得到的错误:
: Cannot delete or update a parent row: a foreign key constraint fails (`demo`.`day`, CONSTRAINT `day_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))
【问题讨论】:
-
本机查询忽略休眠注释。
-
所以我是否应该在删除对象之前始终阅读它,以便通过级联删除它的相关实体? @詹斯
标签: java mysql spring hibernate orm