java - 如果有初始化的子集合,则使用 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
解决方案
推荐阅读
- lucene - 在 lucene 中,如何从搜索查询中查找仅包含单词的文档
- node.js - 无法使用节点 http 模块获取对实时网站 URL 的 http 请求的响应
- google-cloud-platform - 是否可以使用 Google IoT Cloud 服务从我的专用网络外部控制我的 IoT 设备?
- react-native - ./gradlew :app:dependencies 无法显示冲突
- r - R中的聚合函数需要超过2个小时才能执行
- java - 在文本属性中使用 HTML 在 JLabel 中插入图像
- r - 将数组算法包装到函数中的问题
- spring - 不匹配此类型名称
- android - 如何将我的 dialogFragment 显示为圆角?
- php - 如何在不知道键的情况下读取嵌套数组值?