2012-12-01 122 views
2

使用Play! Framework 2.0.4和EBean作爲持久層我試圖將數據庫「元」信息包裝到Java類中。Play Framework 2.0和EBean,包裝INFORMATION_SCHEMA

我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 
); 
} 

當我火了!發揮它告訴我,我需要運行在數據庫上創建表「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」似乎沒有工作環境中的類

回答

2

你應該嘗試通過增加在application.conf文件中的以下禁用的變陣:

evolutionplugin=disabled 

的測試是可以的,因爲你沒有啓動一個真正的應用程序,而是使用了一個不使用evolutions插件的fakeApplication()

+0

我看到2.1RC2對evolutionplugin有一些修改。我會檢查一下。我可以確認禁用這個功能會阻止創建這些表。 – steveturner

0

有趣的是,我只使用包級別值定義了我的eBean服務器, myData。*「而不是」myData.JavaTable「)。爲了解決這個問題,您可能需要將所有類移動到特定的eBean serv呃給自己的套餐。

+0

我最終也這樣做了。不幸的是,evolutionplugin仍然在_both_數據庫中創建了Play2.1RC1的表格,儘管指定了單獨的Ebean服務器。 – steveturner