複数のデータベースを使用する場合、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
ファイルを追加します。