请问Hibernate的事务操作有没有提供回调事件啊?

类似:Jquery的ajax,有成功回调和失败回调..

假如:我想利用Hibernate操作删除数据.
当我调用session.delete,我需要告诉用户是否成功?
要怎么做啊?

阅读 3.1k
3 个回答

你可以看下 hibernate 的api, 他的 delete, save, update 都是没有返回值的, 你可以判断是否抛异常了

返回值都是void,如果发生增删改的失败,会抛出HibernateException,根据Hibernate框架设计,用户应该用try... catch...处理,必要时进行事务的回滚(rollback)。

(一)支持interceptor、event listener、jpa callback
1、interceptor,可以参考hibernate-core-5.0.12.Final-sources.jar!/org/hibernate/EmptyInterceptor.java
有onSaveonDeleteonLoadfindDirtypreFlushpostFlush等
2、event listener
查看AbstractReassociateEventListener的子类
3、jpa callback
支持@PrePersist,@PreRemove,@PostPersist,@PostRemove,@PreUpdate,@PostUpdate,@PostLoad
详情见hibernate-user-guide

(二)对于事务的回调
可以使用registerSynchronization方法,注册TransactionSynchronizationAdapter的子类,重新想要的方法,比如

public void beforeCommit(boolean readOnly) {
    }

    public void beforeCompletion() {
    }

    public void afterCommit() {
    }

    public void afterCompletion(int status) {
    }

其中status为

/** Completion status in case of proper commit */
    int STATUS_COMMITTED = 0;

    /** Completion status in case of proper rollback */
    int STATUS_ROLLED_BACK = 1;

    /** Completion status in case of heuristic mixed completion or system errors */
    int STATUS_UNKNOWN = 2;

(三)针对是否操作成功
不抛异常,一般就是成功

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题