title: How to use 2 datasources with Ebean on a Play Framework 2.5 project?
body: <p>I would like to split my default datasource to 2 different datasources (2 databases). I set my application.conf file:</p>
  
  <pre><code>db {
  
    common.driver = org.mariadb.jdbc.Driver
    common.username = "root"
    common.password = "123456"
    common.url = "jdbc:mariadb://localhost/common"
  
    laundry.driver = org.mariadb.jdbc.Driver
    laundry.username = "root"
    laundry.password = "123456"
    laundry.url = "jdbc:mariadb://localhost/laundry"
  
    #default.logSql=true
  }
  </code></pre>
  
  <p>and I set the ebean models:</p>
  
  <pre><code>ebean.common = ["models.Unit", "models.Building", "models.User"]
  ebean.laundry = ["models.Machine", "models.Schedule", "models.Event"]
  </code></pre>
  
  <p>but I get a fatal error at compile time:</p>
  
  <pre><code>Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:
  
  1) Error injecting constructor, java.lang.IllegalStateException: Bean class models.Unit is not enhanced?
    at play.db.ebean.EbeanDynamicEvolutions.&lt;init&gt;(EbeanDynamicEvolutions.java:35)
    at play.db.ebean.EbeanDynamicEvolutions.class(EbeanDynamicEvolutions.java:32)
    while locating play.db.ebean.EbeanDynamicEvolutions
    at play.db.ebean.EbeanModule.bindings(EbeanModule.java:21):
  Binding(class play.api.db.evolutions.DynamicEvolutions to ConstructionTarget(class play.db.ebean.EbeanDynamicEvolutions) eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -&gt; play.api.inject.guice.GuiceableModuleConversions$$anon$1)
    while locating play.api.db.evolutions.DynamicEvolutions
  Caused by: java.lang.IllegalStateException: Bean class models.Unit is not enhanced?
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.setEntityBeanClass(BeanDescriptorManager.java:1414)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.createByteCode(BeanDescriptorManager.java:1286)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1208)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:711)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:326)
      at io.ebeaninternal.server.core.InternalConfiguration.&lt;init&gt;(InternalConfiguration.java:141)
      at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:140)
      at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:45)
      at io.ebean.EbeanServerFactory.createInternal(EbeanServerFactory.java:108)
      at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:67)
      at play.db.ebean.EbeanDynamicEvolutions.lambda$start$3(EbeanDynamicEvolutions.java:49)
      at java.util.HashMap.forEach(HashMap.java:1288)
      at play.db.ebean.EbeanDynamicEvolutions.start(EbeanDynamicEvolutions.java:49)
      at play.db.ebean.EbeanDynamicEvolutions.&lt;init&gt;(EbeanDynamicEvolutions.java:38)
      at play.db.ebean.EbeanDynamicEvolutions$$FastClassByGuice$$52c94231.newInstance(&lt;generated&gt;)
      at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
      at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
      at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
      at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
      at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
      at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
      at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
      at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
      at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
      at com.google.inject.Guice.createInjector(Guice.java:96)
      at com.google.inject.Guice.createInjector(Guice.java:84)
      at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
      at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
      at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:168)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:164)
      at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:164)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131)
      at scala.Option.map(Option.scala:146)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129)
      at scala.util.Success.flatMap(Try.scala:231)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121)
      at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
      at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
      at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
      at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
      at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
      at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
      at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
  
  2) Error injecting constructor, java.lang.IllegalStateException: Bean class models.Unit is not enhanced?
    at play.db.ebean.EbeanDynamicEvolutions.&lt;init&gt;(EbeanDynamicEvolutions.java:35)
    at play.db.ebean.EbeanDynamicEvolutions.class(EbeanDynamicEvolutions.java:32)
    while locating play.db.ebean.EbeanDynamicEvolutions
    at play.db.ebean.EbeanModule.bindings(EbeanModule.java:21):
  Binding(class play.api.db.evolutions.DynamicEvolutions to ConstructionTarget(class play.db.ebean.EbeanDynamicEvolutions) eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -&gt; play.api.inject.guice.GuiceableModuleConversions$$anon$1)
    while locating play.api.db.evolutions.DynamicEvolutions
    while locating play.api.db.evolutions.ApplicationEvolutionsProvider
    at play.api.db.evolutions.EvolutionsModule.bindings(EvolutionsModule.scala:22):
  Binding(class play.api.db.evolutions.ApplicationEvolutions to ProviderConstructionTarget(class play.api.db.evolutions.ApplicationEvolutionsProvider) eagerly) (via modules: com.google.inject.util.Modules$OverrideModule -&gt; play.api.inject.guice.GuiceableModuleConversions$$anon$1)
    while locating play.api.db.evolutions.ApplicationEvolutions
  Caused by: java.lang.IllegalStateException: Bean class models.Unit is not enhanced?
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.setEntityBeanClass(BeanDescriptorManager.java:1414)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.createByteCode(BeanDescriptorManager.java:1286)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1208)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:711)
      at io.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:326)
      at io.ebeaninternal.server.core.InternalConfiguration.&lt;init&gt;(InternalConfiguration.java:141)
      at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:140)
      at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:45)
      at io.ebean.EbeanServerFactory.createInternal(EbeanServerFactory.java:108)
      at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:67)
      at play.db.ebean.EbeanDynamicEvolutions.lambda$start$3(EbeanDynamicEvolutions.java:49)
      at java.util.HashMap.forEach(HashMap.java:1288)
      at play.db.ebean.EbeanDynamicEvolutions.start(EbeanDynamicEvolutions.java:49)
      at play.db.ebean.EbeanDynamicEvolutions.&lt;init&gt;(EbeanDynamicEvolutions.java:38)
      at play.db.ebean.EbeanDynamicEvolutions$$FastClassByGuice$$52c94231.newInstance(&lt;generated&gt;)
      at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
      at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
      at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
      at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
      at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
      at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
      at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:405)
      at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:400)
      at play.api.db.evolutions.ApplicationEvolutionsProvider.get$lzycompute(EvolutionsModule.scala:53)
      at play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:53)
      at play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:44)
      at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
      at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72)
      at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
      at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
      at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
      at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
      at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
      at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
      at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
      at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
      at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
      at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
      at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
      at com.google.inject.Guice.createInjector(Guice.java:96)
      at com.google.inject.Guice.createInjector(Guice.java:84)
      at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
      at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
      at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:168)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:164)
      at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:164)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131)
      at scala.Option.map(Option.scala:146)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129)
      at scala.util.Success.flatMap(Try.scala:231)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:129)
      at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:121)
      at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
      at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
      at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
      at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
      at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
      at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
      at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
  
  2 errors
  </code></pre>
  
  <p>My Unit.java file looks like:</p>
  
  <pre><code>@javax.persistence.Entity
  @Table(name = "units")
  public class Unit extends Entity
  {
      @Required
      @ManyToOne
      @Column(nullable = false)
      private User owner;
  
      @Required
      @Column(nullable = false)
      private String name;
  
      private static Finder&lt;Long,Unit&gt; find = new Finder&lt;Long,Unit&gt;(Unit.class);
  
      public User getOwner()
      {
          return owner;
      }
  
      public String getName()
      {
          return name;
      }
  
      public String getLabel()
      {
          return getName();
      }
  
      public void setOwner(Long id)
      {
          owner = User.getById(id);
      }
  
      public void setName(String name)
      {
          this.name = name;
      }
  
      @Override
      public boolean delete()
      {
          for (User user : User.findByUnit(this))
          {
              user.updateUnit(null);
          }
  
          return super.delete();
      }
  
      public static Unit getById(Long id)
      {
          return find.byId(id);
      }
  
      public static List&lt;Unit&gt; findAll()
      {
          return find.all();
      }
  }
  </code></pre>
  
  <p>And Entity.java is like:</p>
  
  <pre><code>@MappedSuperclass
  public abstract class Entity extends Model
  {
      @Id
      @Column(nullable = false)
      private long id;
  
      @Column(nullable = false, updatable = false)
      private LocalDateTime createdAt;
  
      @Column(nullable = false)
      private LocalDateTime updatedAt;
  
      public long getId()
      {
          return id;
      }
  
      public String getLabel()
      {
          return "";
      }
  
      public LocalDateTime getCreatedAt()
      {
          return createdAt;
      }
  
      public LocalDateTime getUpdatedAt()
      {
          return updatedAt;
      }
  
      public void setId(Long id)
      {
          this.id = id;
      }
  
      public boolean isPersistent()
      {
          return id &gt; 0;
      }
  
      @Override
      public void save()
      {
          createdAt();
          super.save();
      }
  
      public void update()
      {
          updatedAt();
          super.update();
      }
  
      @Override
      public boolean equals(Object entity)
      {
          if (entity == null) return false;
          if (!(entity instanceof Entity)) return false;
          return id == ((Entity) entity).id;
      }
  
      @Override
      public int hashCode()
      {
          return (int) id;
      }
  
      private void createdAt()
      {
          createdAt = updatedAt = LocalDateTime.now();
      }
  
      private void updatedAt()
      {
          updatedAt = LocalDateTime.now();
      }
  }
  </code></pre>
  
  <p>Should I list all the classes in <code>ebean.XXX = []</code>? Why do I get this error even with the right list?</p>