执行实体侦听器@PostPersist方法Spring Hibernate时DB锁定

时间:2018-09-27 14:59:27

标签: java spring postgresql hibernate jpa

我有一个带有附加实体侦听器的实体:

@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()一切都很好,但是如果侦听器的方法失败,我想回滚实体创建。 预先谢谢你。

0 个答案:

没有答案