我有一个带有附加实体侦听器的实体:
@Entity
@EntityListeners({MyEntityListener.class})
public class A {}
public class MyEntityListener implements ApplicationContectAware {
@PrePersist
public void prePersist(A entity) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void beforeCommit(boolean readOnly) {
//execute a db query
}
});
}
}
@Service
public class MyService {
@Transactional
public A create() {
myRepository.save(new A());
}
因此,当创建一个新实体时,将执行prePersist方法,在此我将再次调用数据库,但似乎数据库已锁定并且应用程序冻结了。有没有办法将当前事务用于第二个数据库调用?如有需要,将提供更多信息。
如果方法是@PostPersist,则afterCommit()一切都很好,但是如果侦听器的方法失败,我想回滚实体创建。 预先谢谢你。