我想在删除实体之前更新我的实体(因为数据库触发器稍后将使用该值)。
所以我在我的 EntityListener 中尝试了这个:
@PreRemove
void onRemove(Object entity) {
CurrentUser currentUser = CDI.current().select(CurrentUser.class).get();
if (currentUser != null && entity instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) entity;
baseEntity.deletedBy = currentUser.userId;
baseEntity.persistAndFlush();
}
}
但是,在删除之前,更改不会持久保存到数据库 - 可能是因为删除事务已经启动。
我怎样才能实现这个目标?
您可以尝试进行此更改。但希望你能解决它。自从你很久以前发帖以来。
@PersistenceContext
private EntityManager entityManager;
@PreRemove
@Transactional
public void onRemove(Object entity) {
CurrentUser currentUser = CDI.current().select(CurrentUser.class).get();
if (currentUser != null && entity instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) entity;
baseEntity.setDeletedBy(currentUser.getUserId());
// Other actions
// Persist the changes to the entity before removal
entityManager.merge(baseEntity);
entityManager.flush(); // Ensure changes are flushed to the database
}
}