2017-05-08 52 views
0

我有一個問題,刪除許多方面的一個ManyToOne關係。我已經從關係中刪除了所有CascadeTypes,但問題仍然存在。該條目不會被刪除(只有選擇被執行,沒有刪除查詢)。我試圖通過CRUD庫調用來刪除它。它調用該方法併成功執行,但沒有任何反應。Java Spring存儲庫刪除不起作用OneToMany Relationship

關係如下:活動具有指定的課程,課程可以分配許多活動。一個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; 

... 
} 

活動類型(沒有參考到活動)

public class ActivityType implements Item, Serializable { 

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

@Column(name = "name", nullable = false, unique = true) 
private String name; 
... 
} 

任何想法如何解決此問題或至少調試它?謝謝。

+1

您是否嘗試過'orphanRemoval = true'? –

+0

我已經將orphanRemoval添加到課程結束,並且沒有任何更改。此外,這不是期望的行爲(當我刪除活動時刪除課程)。或者你指的是將它添加到活動部分? –

+1

如果你想刪除子Activity,你必須在Course類中添加@OneToMany(orphanRemoval = true)'。如果刪除了「活動」,這將不會刪除「課程」。 –

回答

2

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; 

    ... 

} 
+0

我也添加了這個'cascade = {CascadeType.MERGE,CascadeType.REFRESH,CascadeType.DETACH,CascadeType.REMOVE}'使它正常工作。 –

+0

爲什麼不添加'cascade = CascadeType.ALL'? –

+0

由於某些原因,包含在ALL中的CascadeType.PERSIST會阻止刪除的發生。也許這是一個ORM數據上下文,我不確定。 –

1

嘗試從Course刪除對Activity的引用。對我來說似乎沒有必要

+0

我從'Course'中刪除了對'Activity'的引用,但它仍然無效。 –