Java Spring 存储库删除不起作用 OneToMany 关系
Java Spring Repository delete not working OneToMany Relationship
我在删除 ManyToOne 关系的多边时遇到问题。我已经从关系中删除了所有 CascadeTypes,但问题仍然存在。该条目不会被删除(只执行选择,不执行删除查询)。我正在尝试通过 CRUD 存储库调用删除它。它调用该方法并成功执行但没有任何反应。
关系如下:一个Activity有一个分配的课程,一个课程可以有许多分配给它的活动。 Activity 具有特定的 ActivityType。
类如下
Activity
public class Activity implements Item, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
@ManyToOne
@JoinColumn(name = "type_id", nullable = false)
private ActivityType type;
@ManyToOne
@JoinColumn(name = "course_id", nullable = false)
@JsonSerialize(using = CustomCourseSerializer.class)
private Course course;
...
}
课程
public class Course implements Item, Serializable {
...
@OneToMany(mappedBy = "course", fetch = FetchType.EAGER, targetEntity = Activity.class) //cascade = { CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE}
@Fetch(value = FetchMode.SUBSELECT)
private List<Activity> activities;
...
}
Activity 类型(未引用 Activity)
public class ActivityType implements Item, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false, unique = true)
private String name;
...
}
有什么办法可以解决这个问题或至少对其进行调试吗?谢谢。
尝试从 Course
中删除对 Activity
的引用。我觉得没必要
在 Course
实体的 @OneToMany
注释中添加 orphanRemoval = true
属性。
public class Course implements Item, Serializable {
...
@OneToMany(mappedBy = "course", fetch = FetchType.EAGER, targetEntity = Activity.class, orphanRemoval = true, cascade = CascadeType.REMOVE )
@Fetch(value = FetchMode.SUBSELECT)
private List<Activity> activities;
...
}
我在删除 ManyToOne 关系的多边时遇到问题。我已经从关系中删除了所有 CascadeTypes,但问题仍然存在。该条目不会被删除(只执行选择,不执行删除查询)。我正在尝试通过 CRUD 存储库调用删除它。它调用该方法并成功执行但没有任何反应。
关系如下:一个Activity有一个分配的课程,一个课程可以有许多分配给它的活动。 Activity 具有特定的 ActivityType。
类如下
Activity
public class Activity implements Item, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
...
@ManyToOne
@JoinColumn(name = "type_id", nullable = false)
private ActivityType type;
@ManyToOne
@JoinColumn(name = "course_id", nullable = false)
@JsonSerialize(using = CustomCourseSerializer.class)
private Course course;
...
}
课程
public class Course implements Item, Serializable {
...
@OneToMany(mappedBy = "course", fetch = FetchType.EAGER, targetEntity = Activity.class) //cascade = { CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE}
@Fetch(value = FetchMode.SUBSELECT)
private List<Activity> activities;
...
}
Activity 类型(未引用 Activity)
public class ActivityType implements Item, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false, unique = true)
private String name;
...
}
有什么办法可以解决这个问题或至少对其进行调试吗?谢谢。
尝试从 Course
中删除对 Activity
的引用。我觉得没必要
在 Course
实体的 @OneToMany
注释中添加 orphanRemoval = true
属性。
public class Course implements Item, Serializable {
...
@OneToMany(mappedBy = "course", fetch = FetchType.EAGER, targetEntity = Activity.class, orphanRemoval = true, cascade = CascadeType.REMOVE )
@Fetch(value = FetchMode.SUBSELECT)
private List<Activity> activities;
...
}