gpt4 book ai didi

hibernate - 刷新后调用 Hibernate PostInsertEventListener

转载 作者:行者123 更新时间:2023-12-05 01:16:09 28 4
gpt4 key购买 nike

我有一个实现 Hibernate 的类 PostInsertEventListener与 Hibernate 相关的 SessionFactory通过 Spring 。拦截器是为 post-insert 指定的事件类型 。每当我执行 session.save(entity) 时都会调用此拦截器.但是,执行发生在事务刷新之前。如果数据库抛出异常,这是有问题的。

问题:
有没有一种方法可以指定调用拦截器 session.flush()已被调用?

我试着做 insertEvent.getSession().flush()在事件监听器中,但由于尚未设置 id,因此会产生主键违规异常。

我还没有探索registerSynchronization方式,因为我似乎缺少一些基本配置。正在使用的事务管理器是 org.springframework.orm.hibernate3.HibernateTransactionManager并且事务边界由 @Transactional 指定注解。 hibernate 版本是 3.6

最佳答案

当前解决方案:

将 Post(Insert|Update|Delete)Event 存储在 Map 中,以 Session 为键。从 session 的 FlushEventListener 中的映射中获取事件并处理该事件。

使用的 map 是 Guava Cache过期间隔设置为分钟。这将捕获由于 SQLException 导致 flush() 失败并且需要从映射中删除该 session 的条目的情况。

关于hibernate - 刷新后调用 Hibernate PostInsertEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13635555/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com