2

Play!を使用する Framework2.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」を介したクラスの設定は機能していないようです。

4

2 に答える 2

2

application.confファイルに以下を追加して、進化を無効にしてみてください。

evolutionplugin=disabled

実際のアプリケーションを起動していないので、テストはfakeApplication()問題ありませんが、evolutionsプラグインを使用しないを使用しています。

于 2012-12-02T13:16:48.610 に答える
0

ちなみに、パッケージレベルの値(つまり、「myData.JavaTable」ではなく「myData。*」)を使用してeBeanサーバーを定義することに成功しただけです。これを実現するには、特定のeBeanサーバーのすべてのクラスを独自のパッケージに移動する必要がある場合があります。

于 2013-01-16T22:07:44.130 に答える