16

我有 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 会正确生成表。

问题在于实际与这些实体合作。任何不在“默认”包中的东西都会引发此错误(以辅助数据库中的用户表为例)

如果我尝试查询表的所有行:

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]
4

3 回答 3

7

我遇到了同样的问题,我通过在 Model.Finder 级别指定服务器名称来修复它。

因此,在您的情况下,在您的 User 类中,您应该具有以下内容:

public static Model.Finder<Long, User> find = new Finder<Long, User>("secondary", Long.class, User.class);
于 2013-09-08T21:16:55.393 回答
7

好吧,你application.conf似乎是正确的。

您可以像这样使用辅助服务器:

EbeanServer secondary = Ebean.getServer("secondary");
secondary.find(User.class).findList();

一旦你有了你的辅助服务器,你可以像对待Ebean单例一样对待它。

于 2013-08-19T06:28:23.537 回答
4

您可以同时使用:

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 使用默认服务器,即使在您的用户实体上!

于 2014-02-06T06:26:07.933 回答