我有一个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会话的代理,并且仅在该线程尝试使用它时才打开并与当前线程绑定。

07-24 02:03