[英]Multiple Databases with Play Framework 2.1.x
我有2個數據庫需要連接。 我可以在application.conf文件中輕松連接到它們,如下所示:
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/db1"
db.default.user=postgres
db.default.password="password"
db.secondary.driver=org.postgresql.Driver
db.secondary.url="jdbc:postgresql://localhost/db2"
db.secondary.user=postgres
db.secondary.password="password"
ebean.default="models.db1.*"
ebean.secondary="models.db2.*"
我在這些包中有我的模型類,並且DDL正確生成表。
問題在於實際使用這些實體。 任何不在“默認”包中的內容都會拋出此錯誤(使用輔助數據庫中的Users表作為示例)
如果我嘗試查詢表的所有行:
List<Users> users = Users.find.all();
它拋出此錯誤:
[PersistenceException: models.db2.Users is NOT an Entity Bean registered with this server?]
即使我100%確定后端有Users表,它是DDL工作的注冊表,並使該表正常,我正在導入正確的類。
我是否需要某種方式來查詢不在默認包中的模型類?
編輯:我意識到堆棧跟蹤顯示它正在嘗試使用DefaultServer。 如何讓它使用輔助服務器?
at com.avaje.ebeaninternal.server.core.DefaultServer.createQuery(DefaultServer.java:989) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.createQuery(DefaultServer.java:946) ~[avaje-ebeanorm-server.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.find(DefaultServer.java:982) ~[avaje-ebeanorm-server.jar:na]
at play.db.ebean.Model$Finder.all(Model.java:254) ~[play-java-ebean_2.10.jar:2.1.3]
好的,你的application.conf
似乎是正確的。
您可以像這樣使用輔助服務器:
EbeanServer secondary = Ebean.getServer("secondary");
secondary.find(User.class).findList();
一旦你有了輔助服務器,就可以像處理Ebean
單例一樣對待它。
我有同樣的問題,我通過在Model.Finder級別指定服務器名稱來修復它。
因此,在您的情況下,在您的User類中,您應該具有以下內容:
public static Model.Finder<Long, User> find = new Finder<Long, User>("secondary", Long.class, User.class);
您可以同時使用:
public static Model.Finder<Long, User> find = new Finder<Long, User>("secondary", Long.class, User.class);
和
Ebean.getServer("secondary");
但是您必須在實體上使用save方法和服務器聲明
public void save(String server)
沒有save()
ebean使用默認服務器,甚至在您的用戶實體上!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.