複数のデータベースを使用する場合、1 つのデータベースは既定のデータベースとして認識されます。非既定のデータベースでのみ使用すべきエンティティBeanに対して、4 つの処理を行う必要があります。

モデルコンストラクタ

使用するデータベースの文字列名を取得する io.ebean.Model コンストラクタを使用します。

...
@DbName("other")
@MappedSuperclass
public abstract class OtherBaseDomain extends Model {

  public OtherBaseDomain() {
    super("other");             // "other" -> database name
  }
  ...
}
...
@DbName("other")
@MappedSuperclass
open class OtherBaseDomain : Model("other") {  // "other" -> database name

 ...

}

このモデルを拡張するすべてのエンティティBeanは、save()delete() のときに指定のデータベースを使用します。

@DbName

マッピングされたスーパークラスまたは個別のエンティティBeanに @DbName を入れます。これによって、このエンティティBeanタイプのクエリが指定された非既定のデータベースを使用して実行されるように、クエリBean生成時に読み込まれます。

...
@DbName("other")  // "other" -> database name
@MappedSuperclass
public abstract class OtherBaseDomain extends Model {

  public OtherBaseDomain() {
    super("other");             // "other" -> database name
  }
  ...
}
...
@DbName("other")   // "other" -> database name
@MappedSuperclass
open class OtherBaseDomain : Model("other") {  // "other" -> database name

 ...

}

OtherBaseDomain を拡張するすべてのエンティティBeanに対して、クエリBeanは指定されたデータベースのデフォルトを使用するようになります。

Finderコンストラクタ

io.ebean.Finder を使用している場合は、同様に使用するデータベースの文字列名を取得するコンストラクタを使用します。

...
public class CustomerFinder extends Finder {

  public CustomerFinder() {
    super("other");             // "other" -> database name
  }
  ...
}
...
open class CustomerFinder : Finder("other") {  // "other" -> database name
 ...
}

CustomerFinder のメソッドを使用すると、指定されたデータベースのデフォルトを使用するようになります。

エンティティタイプの登録

また、一部のエンティティタイプを既定のデータベースに登録し、他の非既定のデータベースに他のエンティティタイプを登録する必要があります。

Ebeanバージョン12.2.1以降、クエリBean生成ではエンティティBeanタイプを適切なデータベースに登録するためのコードが生成されます。

名前に基づいて適切なデータベースにエンティティBeanを登録する ServerConfigProvider の実装を作成します。

public class RegisterDomainBeans implements ServerConfigProvider {

  private static final String OTHER = "other";

  private static final String DB = "db";

  @Override
  public void apply(ServerConfig serverConfig) {

      log.debug("register beans for {}", serverConfig.getName());
      if (DB.equals(serverConfig.getName())) {
        // the default database
        serverConfig.addClass(DCustomer.class);
        serverConfig.addClass(DOrder.class);
        serverConfig.addClass(DProduct.class);
        ...

      } else if (OTHER.equals(serverConfig.getName())) {
        // second OTHER database
        serverConfig.setDefaultServer(false);
        serverConfig.addClass(OSales.class);
        serverConfig.addClass(OMarket.class);
        ...

      }
  }
}

ServerConfigProvider実装(例:RegisterDomainBeans)を指定するために、サービスローダ src/main/resources/META-INF/services/io.ebean.config.ServerConfigProvider ファイルを追加します。