我试图检测实体的关系是否已更新,但我尝试或发现的一切都不起作用。简言之,我拥有的是:
@Entity
@EntityListeners(KidsListener.class)
@Table(name = "user")
public class User {
@Setter(AccessLevel.PRIVATE)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Access(AccessType.PROPERTY)
private Long id;
@Setter(AccessLevel.NONE)
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Kid> kids = new HashSet<>(0);
@Version
@Column(name = "version")
private Long version;
}
我试过两种方法- EntityListeners
实施 PostCollectionUpdateEventListener
```
public class KidsListener implements PostCollectionUpdateEventListener {
@PostPersist
@PostUpdate
private void afterAnyUpdate(User user) {
// do something
}
@Override
public void onPostUpdateCollection(PostCollectionUpdateEvent event) {
PersistentCollection collection = event.getCollection(); // do something
}
}
这些都不管用,即使是家长版 `User` 实体未更改。
保存部分类似于:
User user = userRepository.findById(id);
for(Kid kid : mappedFromDto.getKids()){
user.getKids().add(kid);
}
userRepository.save(user);
我听不进去 `Kid` 更改是因为我想(在一个请求中)发送一个包含用户孩子的所有更改的包。
1条答案
按热度按时间6tdlim6h1#
对不起,我得问问。你注册了听众吗?
你还必须创建一个
META-INF/services/org.hibernate.integrator.spi.Integrator
包含integrator类的完全限定名的文件。在那之后,你应该收到所有事件。
请注意,还有其他事件,如post\u collection\u remove和post\u collection\u recreate,您可能还需要侦听这些事件才能捕获插入/删除。