Java Spring Repository 删除不起作用 一对多关系

Ion*_*ert 0 java database spring many-to-one sql-delete

我有删除到多对一关系的多方面的问题。我已经从关系中删除了所有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;

    ...
}
Run Code Online (Sandbox Code Playgroud)

课程

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;

...
}
Run Code Online (Sandbox Code Playgroud)

活动类型(没有对活动的引用)

public class ActivityType implements Item, Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "name", nullable = false, unique = true)
private String name;
...
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题或至少调试它?谢谢你。

Abd*_*han 5

在实体orphanRemoval = true@OneToMany注释中添加属性Course

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;

    ...

}
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,包含在 ALL 中的 CascadeType.PERSIST 会阻止删除的发生。也许这是一个 ORM 数据上下文,我不确定。 (3认同)
  • 我还添加了这个 `cascade = { CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH, CascadeType.REMOVE}` 以使其正常工作。 (2认同)