13

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()

何か案は?

ありがとう!リカルド

4

5 に答える 5

9

アクセスするデータベースをクエリで指定する必要があります。

たとえば、 secondDB からすべてのユーザーを取得する場合:

// Get access to your secondDB
EbeanServer secondDB = Ebean.getServer("secondDB");

// Get all users in secondDB
List<User> userList = secondDB.find(User.class).findList(); 
于 2013-07-01T08:41:40.053 に答える
2

save()、、、またはを使用する場合はdelete()、たとえばsave()メソッド用にEbeanサーバーを指定する必要があります。update()refresh()

classA.save("firstDB");
于 2012-08-30T18:34:48.690 に答える
1

私は同じ問題に遭遇し、それを調査するために丸一日を無駄にしましたが、ついにそれを手に入れました。

1.名前付き eabean サーバーを定義する

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

これで、実行時に [default] と [aux] の 2 つの eBean サーバーができました。

2.app conf ファイル ebean.default="models.*"

ebean.aux= "secondary.*"

パッケージ models.* の下のエンティティは [default] サーバーに構成され、パッケージ secondary.* の下のエンティティは [aux] サーバーに構成されます。これはJavaクラスの強化か何かに関係しているのではないかと思います。エンティティを別のパッケージに分ける必要はありませんが、異なる ebean サーバーのエンティティが同じパッケージの下にあると、奇妙な問題や例外が発生する可能性があります。

  1. モデルを使用する場合、保存/削除/更新関連のメソッドはサーバー名をパラメーターとして追加する必要があります

    Student s = new Student(); s.save("aux");

  2. ファインダーを使用するときは、ファインダーを次のように定義する必要があります

    public static Finder find = new Finder("aux",Long.class,Student.class);

于 2016-08-28T16:49:13.840 に答える
0

これにより、db テーブルに保存してエラーを解決するという問題が解決されました。

「javax.persistence.PersistenceException: デフォルトの EbeanServer が定義されていません。これは通常、ebean.datasource.default プロパティを介して設定されます。それ以外の場合は、registerServer() を介してプログラムで登録する必要があります」

于 2013-08-10T15:15:55.767 に答える
0

同じケースではないかもしれませんが、私はPlay 2.1.0 でこのSomeClass が強化されていない 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!!)
于 2013-06-27T11:50:40.967 に答える