我使用的是jpa/hibernate/spring,有一个简单的jpa实体模型,如下所示:
@Entity
@Table(name = "record")
public class Record extends BaseEntity {
//...
@OneToMany(mappedBy = "record", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Document> documents;
}
@Entity
@Table(name = "document")
public class Document extends BaseEntity {
//...
@ManyToOne
@JoinColumn(name = "record_id")
private Record record;
@ManyToOne
@JoinColumn(name = "document_model_id")
private DocumentModel documentModel;
@Entity
@Table(name = "document_model")
public class DocumentModel extends BaseEntity {
//...
}
还有我的 RecordService
如图所示:
@Transactional
public class RecordService {
private RecordRepository repository;
public RecordDTO update(RecordDTO dto) {
Record record = repository.findById(dto.getId());
updateEntity(entity, dto);
repository.save(entity);
}
}
我还有一个通用事件侦听器:
public class RecordEventListener implements PostUpdateEventListener {
@Override
public void onPostUpdate(PostUpdateEvent event) {
Object[] oldState = event.getOldState();
Object[] currentState = event.getState();
Object entity = event.getEntity();
//original Record id?
}
//...
}
我的理解是,当我调用update方法(在服务层上)时,任何脏的jpa对象都将被更新/持久化到数据库中,并且在关闭事务之前,将生成postpdate事件,由侦听器处理。有时记录对象本身没有直接的更改,因此不会为记录实体本身生成postupdateevent,而只为记录对象图上其他受影响的jpa实体生成postupdateevent,这是预期的。
是否有可能以某种方式通过 repository.save(entity);
通过事务信息调用方法?我需要找到它的身份证。
1条答案
按热度按时间j7dteeu81#
你说的“原始身份证”是什么意思?id不能更改,因此“当前实体”的id与实体传递到时的id相同
save
. 这个PostUpdateEvent
甚至有一个getId
方法可以用于此目的。