Play Framework 2.0和EBean,包装INFORMATION_SCHEMA

时间:2012-12-01 21:04:58

标签: java playframework-2.0 ebean

使用Play! Framework 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

编辑我删除了配置文件中的evolution插件并开始获取:

RuntimeException DataSource user is null 

所以,研究一下我决定在配置文件中禁用其他数据源,并将我尝试与“db.default”和“ebean.default”通信的数据库移动,模型开始工作。如果Play定义了多个数据库,有没有办法告诉模型它应该使用哪个数据源?通过“ebean.default =”myData.JavaTable“设置类似乎不起作用。

2 个答案:

答案 0 :(得分:2)

您应该尝试通过在application.conf文件中添加以下内容来禁用演进:

evolutionplugin=disabled

测试没问题,因为你没有启动真正的应用程序,而是使用不使用evolutions插件的fakeApplication()

答案 1 :(得分:0)

有趣的是,我只是成功使用包级别值定义了我的eBean服务器(所以,“myData。*”而不是“myData.JavaTable”)。要解决此问题,您可能必须将特定eBean服务器的所有类移动到它们自己的包中。