代码之家  ›  专栏  ›  技术社区  ›  Daniel Haughton

Hibernate Cascade:保存父实体而不保存子实体时删除子实体

  •  0
  • Daniel Haughton  · 技术社区  · 6 年前

    所以我有一个schedule对象,它包含DateActiveScheduleItems的列表。我希望这样,如果我从schedule对象的列表中删除DateActiveScheduleItems项目,并使用CrudeRepository保存该计划,它会从数据库中删除DateActiveScheduleItem,但目前我的代码似乎没有这样做。我应该如何改变级联?

    @Entity
    public class Schedule {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    @ManyToOne
    @JoinColumn(name = "usergroup_id")
    private UserGroup userGroup;
    
    private String description;
    
    
    private boolean master;//is this a schedule for all supervalus(true) or one supervalu(false)
    
    @OneToMany(mappedBy = "schedule",cascade = CascadeType.ALL)
    private List<DateActiveScheduleItem> dateActiveScheduleItems = new ArrayList<>();
    
    @OneToMany(mappedBy = "schedule",cascade = CascadeType.PERSIST)
    private List<MusicScheduleItem> musicScheduleItems = new ArrayList<>();
    
    @OneToMany(mappedBy = "schedule",cascade = CascadeType.PERSIST)
    private List<AdvertisementScheduleItem> advertisementScheduleItems = new ArrayList<>();
    
    @Basic
    @Temporal(TemporalType.DATE)
    private java.util.Date dateAdded;
    public Long getId() {
        return id;
     //getters setters
    }
    

    DateActiveScheduleItem

    @Entity
    public class DateActiveScheduleItem {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Basic
    @Temporal(TemporalType.DATE)
    private Date date;
    
    
    
    @JsonIgnore
    @ManyToOne
    @JoinColumn(name = "schedule_id")
    private Schedule schedule;
    //getters setters}
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Emil Hotkowski    6 年前

    孤立删除 从关系中删除相应的子级时,将其删除。所以,若从dateActiveScheduleItems集合中删除1个DateActiveScheduleItem,JPA也会自动从数据库中删除该DateActiveScheduleItem。

    @OneToMany(mappedBy = "schedule",cascade = CascadeType.ALL, orphanRemoval="true")
    private List<DateActiveScheduleItem> dateActiveScheduleItems = new ArrayList<>();
    

    有关OrphanRemovel的更多信息 HERE