我需要连接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]
答案 0 :(得分:7)
好的,您的application.conf
似乎是正确的。
您可以像这样使用辅助服务器:
EbeanServer secondary = Ebean.getServer("secondary");
secondary.find(User.class).findList();
一旦你有了辅助服务器,就可以像处理Ebean
单身一样对待它。
答案 1 :(得分:6)
我遇到了同样的问题,我通过在Model.Finder级别指定服务器名称来修复它。
因此,在您的情况下,在您的User类中,您应该具有以下内容:
public static Model.Finder<Long, User> find = new Finder<Long, User>("secondary", Long.class, User.class);
答案 2 :(得分: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使用默认服务器,即使在您的用户实体上也是如此!