首页 > 解决方案 > 如何使用 jpa 处理分布式事务

问题描述

我有一个要求,我需要在两个不同的数据库 MYSQL 和 mongodb 中插入减少的。在故障转移场景的情况下,整个事务应该回滚。请尽早提供帮助。需要实现这个要求。

标签: mysqlmongodbhibernatejpajta

解决方案


首先,您必须定义两个数据库连接,因此还要定义两个不同的持久性单元

持久性.xml

文件。

之后,只需在每个 DAO 方法中创建 2 个单独的 EntityManager。

尝试以下操作:

persistFoo(Foo f) {
    // Create these EntityManagers with a proper connection/persistence unit name
    EntityManager emMySQL = //your MySQL db
    EntityManager emMongo = //your Mongo db

    EntityTransaction txMySQL = emMySQL.getTransaction();
    EntityTransaction txMongo = emMongo.getTransaction();    

    try {
       txMySQL.begin();
       emMySQL.persist(f);
       txMySQL.commit();

       txMongo.begin();
       emMongo.persist(f);
       txMongo.commit();
    } catch(Exception e) {
       if(txMySQL.isActive()) {
          txMySQL.rollback();
       }
       if(txMongo.isActive()) {
          txMongo.rollback();
       }
    } finally {
       emMySQL.close();
       emMongo.close();
    }
}

推荐阅读