我们正在使用Play Framework 2.0.3设置一个稍微复杂的项目。
我们需要访问多个数据库(预先存在),并希望使用框架内置工具(即EBean)来实现。
我们尝试在“models”包中创建所有模型类,然后将每个类的FQN映射到application.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()
有什么想法吗?
谢谢! 里卡多
答案 0 :(得分:8)
您必须在查询中指定要访问的数据库。
例如,如果要从secondDB中检索所有用户:
// Get access to your secondDB
EbeanServer secondDB = Ebean.getServer("secondDB");
// Get all users in secondDB
List<User> userList = secondDB.find(User.class).findList();
答案 1 :(得分:2)
使用save()
,delete()
,update()
或refresh()
时,您必须指定Ebean服务器,例如save()方法:
classA.save("firstDB");
答案 2 :(得分:1)
我遇到了同样的问题,浪费了一整天的时间来调查它,最后我得到了它。
1.define named eabean server
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost:3306/db1"
db.default.user=root
db.default.password=123456
db.aux.driver=com.mysql.jdbc.Driver
db.aux.url="jdbc:mysql://localhost:3306/db2"
db.aux.user=root
db.aux.password=123456
现在你在运行时有两个ebean服务器[default]和[aux]。
2.app conf文件 ebean.default = “模型。*”
ebean.aux= "secondary.*"
现在在包模型下运行。*配置为[默认]服务器和包二级下的实体。*配置为[aux]服务器。我认为这可能与java类增强有关。您不需要将实体分成不同的包,但如果不同的ebean服务器的实体在同一个包中,则可能会导致奇怪的麻烦和异常。
使用模型时,保存/删除/更新相关方法应将服务器名称添加为参数
学生s =新学生(); s.save( “AUX”);
使用finder时,您应将Finder定义为
public static Finder find = new Finder(“aux”,Long.class,Student.class);
答案 3 :(得分:0)
可能不是同一个案例,我在Play 2.1.0中遇到了 SomeClass not enhanced PersistenceException ,
唯一遗漏的是我遗忘的public
模型类中的SomeClass
声明..
在Play 2.1.0中,错误消息略有不同:
PersistenceException: java.lang.IllegalStateException: Class [class play.db.ebean.Model] is enhanced and [class models.Address] is not - (you can not mix!!)
答案 4 :(得分:0)
这解决了我保存到db表并解决错误的问题:
“javax.persistence.PersistenceException:默认的EbeanServer尚未定义?这通常是通过ebean.datasource.default属性设置的。否则它应该通过registerServer()以编程方式注册”