【发布时间】:2017-05-08 10:34:38
【问题描述】:
我在删除 ManyToOne 关系的多方时遇到问题。我已经从关系中删除了所有 CascadeTypes,但问题仍然存在。该条目不会被删除(仅执行选择,不执行删除查询)。我正在尝试通过 CRUD 存储库调用删除它来删除它。它调用该方法并成功执行,但没有任何反应。
关系如下:一个活动有一个分配的课程,一个课程可以有许多活动分配给它。一个 Activity 有一个特定的 ActivityType。
类如下。
活动
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;
...
}
任何想法如何解决这个问题或至少调试它?谢谢。
【问题讨论】:
-
你试过
orphanRemoval = true吗? -
我已将 orphanRemoval 添加到课程结束,但没有任何改变。此外,这不是理想的行为(在我删除活动时删除课程)。或者您是指将其添加到 Activity 部分?
-
如果你想删除子
Activity,你必须在Course类中添加@OneToMany(orphanRemoval = true)。如果删除了Activity,这不会删除您的Course。 -
我尝试添加 `orphanRemoval = true` 但没有结果。我仍然无法删除 Activity。
-
请在您删除
Activity实体的位置发布一些代码。
标签: java database spring sql-delete many-to-one