【发布时间】:2021-02-05 08:05:42
【问题描述】:
我正在处理一个问题。我有一对多的关系,就我而言,它看起来像这样:
@Data
@Entity
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
...
@OneToMany(mappedBy = "event", cascade = ALL)
List<TimePeriod> dates;
TimePeriod 实体如下所示:
@Entity
@Data
public class TimePeriod {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
...
@ManyToOne
private Event event;
}
我的 JPA 存储库如下所示:
@Repository
public interface TimePeriodRepository extends JpaRepository<TimePeriod, Long>
{
}
当我执行以下代码时:
event.getDates().stream().forEach(d -> {
timePeriodRepository.deleteById(d.getId());
});
我没有看到记录已从数据库中删除。他们还在那里。我了解 TimePeriod 在我的情况下拥有一方,所以我知道它应该可以工作。
我操作主要是od事件实体,为什么我放了cascade.ALL选项。
但是当我在 TimePeriod 上也有 cascade.ALL 时,不仅相关记录被删除,而且 EVENT 也被删除。
我尝试过的另一种方法是更新事件端,例如:
event.setDates(new ArrayList());
但是当我保存事件之后,我仍然能够在数据库中看到这些日期记录。
谁能告诉我我做错了什么?
【问题讨论】:
-
所以
TimePeriod的实例不会被删除,对吧? -
是的,还在数据库中
标签: java spring hibernate jpa one-to-many