Tôi đang cố gắng duy trì cùng một thực thể cho cả cơ sở dữ liệu MySQL và Postgres (chủ yếu để xác định bất kỳ mâu thuẫn nào và tìm hiểu chi tiết về bất kỳ vấn đề nào khi thực hiện ghi kép - Tôi đã chạy vào đây). Các bài viết tôi đã tìm thấy có tất cả các giải pháp được mô tả phụ thuộc vào các khung công tác bổ sung. Tôi đang cố gắng để giải quyết điều này bằng cách sử dụng Glassfish 4.0 ngoài hộp, JPA 2.1 với EclipseLink 2.5 là nhà cung cấp JPA. Tôi đang sử dụng Eclipse, và nhận ra rằng IDE không hỗ trợ cấu hình nhiều đơn vị persistence trong tệp persistence.xml, vì vậy tôi đang viết XML trực tiếp cho nó.persistence.xml cho nhiều đơn vị liên tục
Tôi đã chờ đợi để làm một cái gì đó như thế này trong các mã (trong cùng một phương pháp):
@PersistenceContext(name = "MyAppMySQLPU")
EntityManager emMySQL;
@PersistenceContext(name = "MyAppPostgresPU")
EntityManager emPostgres;
//...etc...
MyThing thing = new MyThing();
//...etc...
emMySQL.persist(thing);
emPostgres.persist(thing);
và sử dụng một tập tin persistence.xml
chứa này:
<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>
Khi tôi làm điều này, tôi nhận được lỗi sau:
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.
Nhưng, nếu tôi chỉ bao gồm một trong số <persistence-unit>
cụm từ (không quan trọng cái nào), thực thể được lưu vào cơ sở dữ liệu liên quan - tôi không thể tìm ra cách làm cho nó hoạt động với cả hai cùng một lúc (không tận dụng chức năng kiên trì trong các khung công tác bổ sung).