我学习了使用Java和JDBC连接以及SpringTemplate支持的Flywaydb迁移,但是Flyway不支持DAO。
对于具有更多关系的表/实体,使用DAO进行迁移比使用SQL更容易。
是否有解决方案或解决方法来处理这个问题?
我学习了使用Java和JDBC连接以及SpringTemplate支持的Flywaydb迁移,但是Flyway不支持DAO。
对于具有更多关系的表/实体,使用DAO进行迁移比使用SQL更容易。
是否有解决方案或解决方法来处理这个问题?
首先,Flyway有自己的事务管理系统,不使用Spring事务处理。
如果您的DAO扩展了JdbcDaoSupport
,您可以手动实例化您的DAO,然后手动将提供的JdbcTemplate
注入DAO:
public class MyJdbcMigration implements SpringJdbcMigration {
public void migrate(JdbcTemplate jdbcTemplate) {
MyJdbcDao dao = new MyJdbcDao();
dao.setJdbcTemplate(jdbcTemplate);
dao.updateDate();
}
}
import org.apache.deltaspike.core.api.provider.BeanProvider;
public static UserDao getInstance() {
return BeanProvider.getContextualReference(UserDao.class, false, new DaoLiteral());
}
@Override
public void migrate(Connection cnctn) throws Exception{
UserDao userdao = UserDao.getInstance();
List<User> userList = userdao.getAllUsers();
...
}
你的DAO依赖于Flyway旨在更改的结构。因此,我们在这里遇到了先有鸡还是先有蛋的问题。解决这个问题的方法是在应用程序的其余部分(包括DAO)初始化之前运行Flyway。