我想使用@TransactionalEventListener
完成一个工作单元。换句话说,我要注册一个事务回调,该回调在提交事务之前触发。我想到的是一个Repository类,该类跟踪对聚合根和所有相关实体所做的更改。事务即将提交时,它将整个更改集写入数据库,如下所示。
@Component
@Transactional
class FlightRepository implements Repository{
Flight findById(int id){
// return Flight and start tracking changes
}
void add(Flight f){
// add to list of flights to be created before transaction commit
}
void remove(Flight f){
// add to list of flights to be deleted before transaction commit
}
@TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
public void saveChanges(){
// write all changes to db (adds/removes/updates)
}
}
我需要确认的是,仍然可以在TransactionPhase.BEFORE_COMMIT
回调中执行CRUD操作吗?
编辑:如注释中所述,将saveChanges()
访问修饰符从private
更改为public
答案 0 :(得分:1)
是的。没关系。您在BEFORE_COMMIT
回调中所做的工作将与工作单元的事务相同。
顺便说一句,为了使@TransactionalEventListener
工作,您应该将其方法访问修饰符更改为非私有。