使用播放!框架 2.0.4 和 EBean 作为持久层 我试图将数据库“元”信息包装到 Java 类中。
我在 application.conf 中映射类:
db.myData.url="jdbc:sqlserver://localhost:2301;databaseName=myData;"
ebean.myData="models.database.JavaTable"
然后我创建了一个类,如下所示:
package models.database;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import play.db.ebean.Model;
@Entity
@Table(name="tables",schema="INFORMATION_SCHEMA",catalog="myData")
public class JavaTable extends Model{
@Column(name="TABLE_NAME")
public String table_name;
public static Finder<String, JavaTable> find = new Finder<String, JavaTable>(
String.class, JavaTable.class
);
}
当我启动 Play! 时,它告诉我需要在数据库上运行演变以创建表“myData.INFORMATION_SCHEMA.tables”。然后我尝试通过单元测试来测试连接......
@Test
public void testGetTables(){
running(fakeApplication(), new Runnable() {
@Override
public void run() {
EbeanServer server = Ebean.getServer("myData");
List<SqlRow> rows = server.createSqlQuery("select * from myData.Information_Schema.Tables").findList();
for(SqlRow row: rows)
System.out.println("====>Row: " + row.toString());
}
});
}
单元测试执行正确,表名打印成功。
编辑:根据@nico_ekito,我删除了配置文件中的进化插件并开始获取:
RuntimeException DataSource user is null
因此,经过一番研究,我决定禁用配置文件中的其他数据源,并将我尝试与之通信的数据库移动到“db.default”和“ebean.default”,模型开始工作。如果 Play 定义了多个数据库,有没有办法告诉模型应该使用哪个数据源?通过“ebean.default="myData.JavaTable" 设置类似乎不起作用。