gpt4 book ai didi

java - Hibernate 5.x 迁移建议脚本

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:51 25 4
gpt4 key购买 nike

我正在尝试转换我的工作(使用 Hibernate 4.x)脚本,该脚本建议从实际数据库进行迁移。当我想要跟踪更改并将其存储在 FlyWay 使用的 SQL 脚本中时,这尤其方便。

这是我的课:

public class SchemaGenerator {

private static Configuration cfg;
private static String driver = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost/test?tinyInt1isBit=false";
private static String username = "root";
private static String password = "password";

public SchemaGenerator(String packageName) throws Exception {
cfg = new Configuration();
cfg.setProperty("hibernate.hbm2ddl.auto", "update");
cfg.setProperty("hibernate.connection.driver_class", driver);
cfg.setProperty("hibernate.connection.url", url);
cfg.setProperty("hibernate.connection.username", username);
cfg.setProperty("hibernate.connection.password", password);
cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");

Reflections reflections = new Reflections("com.test");
Set<Class<? extends Object>> allClasses = reflections.getTypesAnnotatedWith(Entity.class);
for (Class c : allClasses) {
cfg.addAnnotatedClass(c);
}

}

public static void validate() {
SchemaValidator schemaValidator = new SchemaValidator(cfg);
schemaValidator.validate();
}

public List<SchemaUpdateScript> createUpdateScript(DataSource dataSource, org.hibernate.dialect.Dialect dialect)
throws SQLException {
DatabaseMetadata meta = new DatabaseMetadata(dataSource.getConnection(), dialect, cfg);
List<SchemaUpdateScript> createSQL = cfg.generateSchemaUpdateScriptList(dialect, meta);

return createSQL;
}

/**
* @param args
*/
public static void main(String[] args) throws Exception {
SchemaGenerator gen = new SchemaGenerator("com.test");
Driver driver = com.mysql.jdbc.Driver.class.newInstance();
DataSource dataSource = new SimpleDriverDataSource(driver, url, username, password);

List<SchemaUpdateScript> updateCommands = gen.createUpdateScript(dataSource,
new org.hibernate.dialect.MySQL5Dialect());
if (updateCommands.size() != 0)
System.out.println("" + formatSqlSuggestionScript(updateCommands));
else
System.out.println("Already up to date");
}

private static String formatSqlSuggestionScript(List<SchemaUpdateScript> sqls) {
StringBuilder builder = new StringBuilder("\n\n****update sql suggestion:***\n\n");
for (SchemaUpdateScript str : sqls) {
builder.append("\n" + str.getScript() + ";");
}
builder.append("\n\n");
return builder.toString();
}

}

我对 schemaValidator.validate(); 有一些问题,因为现在它需要元数据,而 cfg.generateSchemaUpdateScriptList(dialect, meta) 不再存在。

您有一些好的开始提示吗?或者现在使用 Hibernate 5x 有更好的方法来做到这一点吗?

最佳答案

您可以实例化org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl并使用SchemaValidator

关于java - Hibernate 5.x 迁移建议脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44374470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com