使用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.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 find = new Finder("secondary", Long.class, User.class); 

你可以使用两者:

 public static Model.Finder find = new Finder("secondary", Long.class, User.class); 

 Ebean.getServer("secondary"); 

但是您必须在实体上使用save方法和服务器声明

 public void save(String server) 

没有save() ebean使用默认服务器,即使在您的用户实体上也是如此!