首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回滚事务与Spring + Hibernate中的多个会话关联

回滚事务与Spring + Hibernate中的多个会话关联
EN

Stack Overflow用户
提问于 2013-08-23 06:08:14
回答 1查看 713关注 0票数 0

我使用Spring MVC + Hibernate,下面是通用方法用于保存(一对多)。如果任何一个表失败,则所有操作滚动beck,因为它们与相同的会话相关联。

代码语言:javascript
复制
public <T, E> long save(T entity, List<E> list) throws DataAccessException {

    Session session = sessionFactory.getCurrentSession();
    long getGenVal=(Long)session.save(entity);
    for(E getlist : list){
    session.save(getlist);
    }

    return getGenVal;
}

控制器中的

代码语言:javascript
复制
@Resource(name = "PersistenceTemplate")
private PersistenceTemplate pt;
long getGenVal=pt.save(purchaseReq,list);

现在,我想维护审计日志,为此,我在相同的方法(保存)中添加了另一个参数,以便将此操作与同一个会话关联起来,这样,如果有3个表的表,就会产生问题。然后自动回滚事务。(春季特征)

代码语言:javascript
复制
public <T, E, K> long save(T entity, List<E> list, K audit) throws DataAccessException {

        Session session = sessionFactory.getCurrentSession();
        long getGenVal=(Long)session.save(entity);
        for(E getlist : list){
        session.save(getlist);
        }
        session.save(audit);
        return getGenVal;
    }

,所以这三个操作都与同一个会话相关联。

但我没有问题,是因为审计路径(日志)实体需要新插入记录的Id,例如(在Controller中)

代码语言:javascript
复制
purchaseReqAT= new ProPurchReqATModel("NEW REQUISION", "INSERT", 1, userId, userIp, sysdate);

“插入”,1,插入和userId之间的userId 1是新生成的ID (PK)!

如果我在获得新插入记录的id后创建一个单独的方法来保存审计跟踪。比如

代码语言:javascript
复制
public <T> long save(T auditTrail) throws DataAccessException {
    Session session = sessionFactory.getCurrentSession();
    long getGenVal=(Long) session.save(auditTrail);
    return getGenVal;
}

而审计跟踪无法在表中插入记录,如何回滚所有以前的事务?以及如何将新生成的ID与同一方法中的审计试用相关联。

有解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-08-23 06:52:48

您应该有一个包含这一点的服务层,而服务层应该是事务层。服务应该调用不同的存储库/daos,这样所有的事情都会发生在单个事务中。

它还简化了控制器代码(这应该只是web请求与不应该包含业务逻辑的服务方法调用之间的一个薄薄的层)。

但是,对于编写审计记录,我会编写一个hibernate拦截器,这样编写审计记录是透明的,而且您不要忘记将它包含在数据修改记录中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18395899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档