无法在 Play 2 中使用多个 ebean 数据库

我们正在使用Play Framework 2.0.3设置一个稍微复杂的项目。

我们需要访问多个数据库(预先存在),并希望使用内置设施(即。EBean)。

我们尝试在“models”包中创建所有模型类,然后将每个类及其FQN映射到apprament.conf中相应的EBean属性:

ebean.firstDB="models.ClassA,models.ClassB,models.ClassC"
ebean.secondDB="models.ClassD"
ebean.thirdDB="models.ClassE,models.ClassF"

这似乎不起作用:

PersistenceException: Error with [models.SomeClass] It has not been enhanced but it's superClass [class play.db.ebean.Model] is? (You are not allowed to mix enhancement in a single inheritance hierarchy) marker[play.db.ebean.Model] className[models.SomeClass] 

我们检查并重新检查,配置正常!

然后,我们尝试为每个数据库模型类使用不同的 Java 包,并在 application.conf 中相应地映射它们:

ebean.firstDB = "packageA.*"
ebean.secondDB = "packageB.*"
ebean.thirdDB = "packageC.*"

从数据库中读取信息时,这可以正常工作,但是当您尝试保存/更新对象时,我们会得到:

PersistenceException: The default EbeanServer has not been defined? This is normally set via the ebean.datasource.default property. Otherwise it should be registered programatically via registerServer()

有什么想法吗?

谢谢!里卡多


答案 1

您必须在查询中指定要访问的数据库。

例如,如果要从 secondDB 中检索所有用户:

// Get access to your secondDB
EbeanServer secondDB = Ebean.getServer("secondDB");

// Get all users in secondDB
List<User> userList = secondDB.find(User.class).findList(); 

答案 2

使用 、 或 时,您必须指定 Ebean 服务器,例如 save() 方法:save()delete()update()refresh()

classA.save("firstDB");

推荐