我試圖堅持同一個實體到MySQL和Postgres數據庫(這主要是爲了找出任何不一致,並找出任何問題的細節做雙寫 - 這我跑到這裏了)。我發現的文章都描述了依賴於其他框架的解決方案。我試圖用GlassFish 4.0開箱即用,JPA 2.1和EclipseLink 2.5作爲JPA提供商來解決這個問題。我使用的是Eclipse,並且意識到IDE不支持在persistence.xml文件中配置多個持久性單元,所以我正在爲此直接編寫XML。persistence.xml爲多個持久性單元
我期待這樣做的代碼(在相同的方法):
@PersistenceContext(name = "MyAppMySQLPU")
EntityManager emMySQL;
@PersistenceContext(name = "MyAppPostgresPU")
EntityManager emPostgres;
//...etc...
MyThing thing = new MyThing();
//...etc...
emMySQL.persist(thing);
emPostgres.persist(thing);
,並使用persistence.xml
文件,其中包含此:
<persistence-unit name="MyAppPostgresPU">
<jta-data-source>jdbc/PostgresPool_test</jta-data-source>
<class>model.MyThing</class>
</persistence-unit>
<persistence-unit name="MyAppMySQLPU">
<jta-data-source>jdbc/MySQLPool_test</jta-data-source>
<class>model.MyThing</class>
</persistence-unit>
當我這樣做,我得到以下錯誤:
SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
SEVERE: Exception while preparing the app
SEVERE: Exception while preparing the app : Could not resolve a persistence unit corresponding to the persistence-context-ref-name [MyAppPostgresPU] in the scope of the module called [MyApp]. Please verify your application.
但是,如果我只包含一個<persistence-unit>
個短語(與哪一個無關),實體被持久化到關聯的數據庫 - 我無法弄清楚如何讓它與兩者同時工作(沒有利用其他框架中的持久性功能)。