Java 版本字段中断了持久层上的删除行为

Java 版本字段中断了持久层上的删除行为,java,hibernate,junit,spring-data-jpa,Java,Hibernate,Junit,Spring Data Jpa,我有实体事件,与另一实体具有指定关系: @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "event") private Set<Reminder> reminders = new HashSet<>(); 添加版本后声明删除不再有效(测试向我显示) saveDefaultEventAndCalendar(); event.setmembers(Collections.empt

我有实体
事件
,与另一实体具有指定关系:

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "event")
private Set<Reminder> reminders = new HashSet<>();
添加
版本后
声明
删除
不再有效(测试向我显示)

saveDefaultEventAndCalendar();
event.setmembers(Collections.emptySet());
eventRepository.save(事件);
Event-actualvent=eventRepository.findOneByCalendarIdAndId(calendar.getId(),Event.getId());
资产(实际、相等(事件));
断言(actualEvent.GetEmlerments().size(),等于(0));
列表提醒=employerrepository.findAll();
断言(rementers.size(),等于(0));
最后一行断言被中断,因为
提醒
在db中(
提醒
链接到
实际事件
实际事件
不再有链接)


< P>我希望用FIX解释这个行为,如果可能的话。< /P> < P>如果你想“代码>提醒> <代码>的生命周期依赖于<代码>事件< /代码>,可以考虑使用<代码> @ EntEngult/<代码>代替<代码> @ OneToMany <代码> .< /P>简单回答: 详细答复: 解决方案的总体思路是使用新注入的
entityManager
推送级联更改,直到事务未关闭为止(级联更改hibernate在相关的特殊属性注释中使用)

。。。
@持久上下文
私人实体管理者实体管理者;
...
@试验
公共作废保存(){
saveDefaultEventAndCalendarFullyInitialized();
event1ForCalendar1.setmembers(Collections.emptySet());
eventRepository.save(event1ForCalendar1);
entityManager.flush();
Event-actualvent=eventRepository.findOneByCalendarIdAndId(calendar1.getId(),event1ForCalendar1.getId());
event1ForCalendar1.setVersion(event1ForCalendar1.getVersion()+1);
资产(实际价值,相等(事件1或价值1));
断言(actualEvent.GetEmlerments().size(),等于(0));
列表提醒=employerrepository.findAll();
断言(rementers.size(),等于(0));
}

还有一件事很重要。在调试模式下,它是一次又一次的传递,行为是不稳定的。这是另一种提供受限关系工具的方法(在我的案例中也是如此)。我看不出有什么理由对我有帮助。你能解释一下吗?
@Column(name = "version_num")
@Version
private long version;
    saveDefaultEventAndCalendar();
    event.setReminders(Collections.emptySet());

    eventRepository.save(event);

    Event actualEvent = eventRepository.findOneByCalendarIdAndId(calendar.getId(), event.getId());
    assertThat(actualEvent, equalTo(event));
    assertThat(actualEvent.getReminders().size(), equalTo(0));

    List<Reminder> reminders = reminderRepository.findAll();
    assertThat(reminders.size(), equalTo(0));
entityManager.flush();
...
@PersistenceContext
private EntityManager entityManager;
...

@Test
public void save() {
    saveDefaultEventAndCalendarFullyInitialized();
    event1ForCalendar1.setReminders(Collections.emptySet());

    eventRepository.save(event1ForCalendar1);
    entityManager.flush();

    Event actualEvent = eventRepository.findOneByCalendarIdAndId(calendar1.getId(), event1ForCalendar1.getId());

    event1ForCalendar1.setVersion(event1ForCalendar1.getVersion() + 1);
    assertThat(actualEvent, equalTo(event1ForCalendar1));
    assertThat(actualEvent.getReminders().size(), equalTo(0));

    List<Reminder> reminders = reminderRepository.findAll();
    assertThat(reminders.size(), equalTo(0));
}