首页 > 解决方案 > 如果有初始化的子集合,则使用 PagingAndSortingRepository.save 保存实体会产生 @PostUpdate/@PostCreate 事件

问题描述

我在我的应用程序中使用 Spring Data Rest 并发现了一些不一致的行为。

我有一个父实体

public class Parent {
    @OneToMany(mappedBy = "parent", targetEntity = Child.class, cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Child> children;
}

和一个有父母参考的孩子

@ManyToOne
@JoinColumn(name = "PARENT_ID", referencedColumnName = "ID")
Parent parent

当我做 parentRepository.save(Parent.builder().build()) 我得到https://hibernate.atlassian.net/browse/HHH-9940

但是当我这样做时

parentRepository.save(Parent.builder.children(Collections.emptyList()).build())

然后我收到两个

@PostPersist
public void onCreate(Object entity) {
   ...
}

和一个

@PostUpdate
public void onUpdate(Object entity) {
   ...
}

破坏我的域逻辑的事件。

我被困在解决这个问题上……我做错了什么吗?为什么存储具有空子列表的父对象会同时发送父对象的创建和更新事件?

编辑:我在两个听众中收到相同的对象(父母)。日志中出现的唯一查询是 INSERT,没有更新痕迹。就像 INSERTing into db 触发了一个额外的幻象 PostUpdate

标签: javajpaspring-data-jpaspring-dataspring-data-rest

解决方案


推荐阅读