【发布时间】:2021-02-02 10:24:15
【问题描述】:
我正在尝试检测实体的关系是否已更新,但我尝试或发现的任何方法都不起作用。 我的简称是:
@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 更改,因为我想(在一个请求中)发送一组用户孩子的所有更改。
【问题讨论】:
标签: java spring hibernate events collections