如何在没有分布式事务的情况下使用JPA将同一对象持久化到两个不同的数据库? [英] How to use JPA to persist same object to two different db's without distributed transaction?
本文介绍了如何在没有分布式事务的情况下使用JPA将同一对象持久化到两个不同的数据库?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
EntityManager mysql = ...;
EntityManager postgres = ...;
MyEntity e = new MyEntity();
e.setStuff();
mysql.persist(e);
postgres.persist(e);
MyEntity
类为其@Id
字段指定@GeneratedValue
策略,两个数据源为非XA数据源。
推荐答案
嗯,我没有发现如何使用容器管理的事务来做到这一点,但却发现了如何使用Bean管理的事务来做到这一点。注入了一个UserTransaction资源,并在Begin/Commit对之间包装了每个持久化资源:
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MyClass
{
@Resource private UserTransaction utx;
public void doStuff()
{
EntityManager mysql = ...;
EntityManager postgres = ...;
MyEntity e = new MyEntity();
e.setStuff();
try {
utx.begin();
mysql.persist(e);
utx.commit();
utx.begin();
postgres.persist(e);
utx.end();
} catch (...) {
...
}
}
}
我以前从未尝试过使用Bean管理的事务,尽管这不是用于生产用途,也不是特别优雅,但如果这从根本上有什么问题,我将非常感激有人指出正确的方法。
这篇关于如何在没有分布式事务的情况下使用JPA将同一对象持久化到两个不同的数据库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文