Java 使用Play Framework 2.1.x的多个数据库

Java 使用Play Framework 2.1.x的多个数据库,java,database,playframework,playframework-2.1,ebean,Java,Database,Playframework,Playframework 2.1,Ebean,我有两个数据库需要连接。我可以在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.

我有两个数据库需要连接。我可以在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生成表

问题在于实际使用这些实体。“default”包之外的任何内容都会引发此错误(以辅助数据库中的Users表为例)

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

List<Users> users = Users.find.all();
尽管我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
singleton一样对待它。

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

因此,在您的用户类中,您应该有如下内容:

public static Model.Finder<Long, User> find = new Finder<Long, User>("secondary", Long.class, User.class);
publicstaticmodel.Finder=newfinder(“secondary”、Long.class、User.class);
您可以同时使用:

public static Model.Finder<Long, User> find = new Finder<Long, User>("secondary", Long.class, User.class);
但是您必须在实体上的服务器声明中使用save方法

public void save(String server)

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

还没有人回答你的问题,所以我认为与其在你的问题后面加上“编辑:”,不如真的编辑它,问问你真正需要什么。不要在applications.conf中使用models.db2.*而要尝试在models.db2.Users中加上models。@GregKopff,我之所以说“编辑”,是因为我编辑问题时不确定是否有人在回答。@Franz,我试过了,但[models.db2.Users]出现了
错误,它没有得到增强,但它是超类[class play.db.ebean.Model]是吗?(不允许在单个继承层次结构中混合增强功能)标记[play.db.ebean.Model]
错误。是的,我尝试过这种方法,但除了实际选择数据之外,在做任何事情时都会遇到问题。例如,使用此方法,我可以获取所有用户,但这些用户与另一个类“Groups”具有OneToMany关系。组也位于辅助数据库中。在视图中,我希望映射每个用户的所有组,因此我有
@user.groups.map{group=>group.name}
,但这会引发以下错误:
[PersistenceException:Query抛出SQLException:ERROR:column t1.users\u id不存在…
即使该列确实存在。哇,这正是我要寻找的。不幸的是,这只适用于涉及查询此模型的任何内容,但每当我使用此方法的save命令时,我都会得到错误
类型\uuuuuuuuuuuuuuuuuu不是注册实体?如果您没有明确列出要使用的实体类,Ebean将在类路径中搜索它们。
您对如何解决这个问题有什么想法吗?(是的,我知道我的模型已经正确创建)。对不起,我不明白。您如何保存对象?我知道
User User User=User.find.byId(aId);User.update(aId);user.delete();
它工作正常,通常……请注意,您还需要告诉Ebean save方法是哪个服务器!
public void save(String server)
。不要使用默认方法
save()
.Bert B.-要么是配置中缺少模型包规范,要么是模型类中的@Entity
Ebean.getServer("secondary");
public void save(String server)