我有一个需求,我需要在两个不同的数据库MYSQL和mongodb中插入减少的对象。在发生故障转移的情况下,应回滚整个事务。
请尽早提供帮助。需要执行此要求。
最佳答案
首先,您必须定义两个数据库连接,因此还要定义两个不同的持久性单元
persistence.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();
}
}
关于mysql - 如何使用JPA处理分布式事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57232384/