簡體   English   中英

使用Play Framework 2.1.x的多個數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM