我有一个Spring MVC + Hibernate + JPA应用程序。在我的数据库中也有具有类似表的4个不同模式。 (针对不同的公司)。
现在,当我使用Hibernate应用程序时,我可以切换持久性单元吗?
我可以使用相同的形式(具有相同的内容)将数据保存在
所有四个模式?
我知道我可以在运行时切换持久性单元,但是我希望能够通过更改持久性单元,使用已经加载的表单将数据保存到所有四个架构中。
最佳答案
我前段时间有类似的问题。
我有两个相同的模式-应用程序必须根据某些逻辑坚持到第一或第二。
它纯粹是Hibernate,但是就JPA而言,我建议在persistence.xml中定义4个持久性单元:
persistence.xml
<persistence-unit name="PU1">
...
</persistence-unit>
<persistence-unit name="PU2">
...
</persistence-unit>
[...]
和已注入EntityManager代理的DAO类-每个都用于不同的PU:
@Repository
public class MyDaoImpl implements MyDao {
@PersistenceContext(unitName = "PU1")
private EntityManager em1;
@PersistenceContext(unitName = "PU2")
private EntityManager em2;
...
public void saveToPU1(MyEntity e) {
em1.persist(e);
}
public void saveToPU2(MyEntity e) {
em2.persist(e);
}
...
}
当然,用
em1
注释的@PersistenceContext(unitName="PU1")
是Spring的Hibernate会话的代理,并且仅在该线程尝试使用它时才打开并与当前线程绑定。