Use JPA during Flyway migration

219 views
Skip to first unread message

Anthony Ferrando

unread,
Jun 25, 2016, 9:27:12 AM6/25/16
to ninja-framework
Hi all,

I am trying to call some of my DAOs (which in turn, use the Entity Manager) from inside a java migration with flyway, here is the relevant code:
V2__AddAdminUser.java:

import conf.Module;
import dao.UserDao;

public class V2__AddAdminUser implements JdbcMigration {

   
@Override
   
public void migrate(final Connection connection) throws Exception {
       
final Injector injector = Guice.createInjector(new Module());

       
// create admin user
       
final UserDao userDao = new UserDao();
        injector
.injectMembers(userDao);
        userDao
.create("admin", "password");
        LOG
.info("Admin user created.");
   
}
}


UserDao.java

public class UserDao extends AbstractDao {

    private Provider<EntityManager> entityManagerProvider;

    protected EntityManager getEntityManager() {
        return entityManagerProvider.get();
    }

    @Inject
    public void setEntityManagerProvider(final Provider<EntityManager> entityManagerProvider) {
        this.entityManagerProvider = entityManagerProvider;
    }

   
@Transactional
   
public UserEntity create(final String username, final String password) {
       
// create the entity
       
final UserEntity user = new UserEntity();
        user
.setUsername(username);

       
// compute password salt/hash, other irrelevant stuff
        // ...

        // persist
        getEntityManager().persist(user);
        getEntityManager().flush();

        return user;
    }
}


This spits out the following stacktrace:
...
Caused by: com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for javax.persistence.EntityManager was bound.
  while locating com.google.inject.Provider<javax.persistence.EntityManager>
    for parameter 0 at dao.UserDao.setEntityManagerProvider(UserDao.java:18)
  at dao.UserDao.setEntityManagerProvider(UserDao.java:18)
  while locating dao.UserDao

1 error
    at com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:992) ~[guice-4.0.jar:na]
    at com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:997) ~[guice-4.0.jar:na]
    at com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:983) ~[guice-4.0.jar:na]
    at db.migration.V2__AddAdminUserAndWelcomeArticle.migrate(V2__AddAdminUserAndWelcomeArticle.java:29) ~[classes/:na]
    at org.flywaydb.core.internal.resolver.jdbc.JdbcMigrationExecutor.execute(JdbcMigrationExecutor.java:45) ~[flyway-core-4.0.jar:na]
    ... 45 common frames omitted




I looked online how to execute java migrations in Ninja, but I haven't found anything so far, does anyone knows how to do this?

Thank you,
Anthony




Reply all
Reply to author
Forward
0 new messages