当前位置: 首页 > 知识库问答 >
问题:

Spring Boot和Hibernate:打印/日志DDL

韩捷
2023-03-14

在我添加了一个或多个带有数据库映射的类(JPA/Hibernate)之后,我希望Hibernate打印出必要的模式更新,以便我可以在数据库上执行它们(例如通过FlyWay)。我不希望自动执行更新。

org.hibernate.tool.hbm2ddl=validate|update|create|create-drop|none
SchemaExport schemaExport = new SchemaExport(cfg);
schemaExport.execute(true, false, false, false);

有没有类似的东西我可以用在Spring靴上?

共有1个答案

柯树
2023-03-14

即使打开了debug,设置show-sql的解决方案对我也不起作用,所以我最终只能编写并运行这个简单的类。

public class SchemaExporter{

public static org.hibernate.cfg.Configuration getConfiguration() {
    org.hibernate.cfg.Configuration cfg = new org.hibernate.cfg.Configuration();
    ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
    scanner.addIncludeFilter(new AnnotationTypeFilter(Entity.class));
    for (BeanDefinition bd : scanner.findCandidateComponents("com.package.where.my.entitybeans.are")) {
        String name = bd.getBeanClassName();
        try {
            System.out.println("Added annotated entity class " + bd.getBeanClassName());
            cfg.addAnnotatedClass(Class.forName(name));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
    cfg.setProperty("hibernate.show_sql", "true");
    cfg.setProperty("hibernate.format_sql", "true");
    cfg.setProperty("hibernate.hbm2ddl.auto", "update");
    cfg.setProperty("hibernate.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");

    cfg.setProperty("hibernate.connection.url", CONNECTIONURL);
    cfg.setProperty("hibernate.connection.username", USERNAME);
    cfg.setProperty("hibernate.connection.password", PWD);
    cfg.setProperty("hibernate.connection.driver", DRIVER);
    return cfg;
}

public static void main(String[] args) {
    SchemaExport export = new SchemaExport(getConfiguration());
    export.setDelimiter(";");
    export.setHaltOnError(true);
    export.setFormat(true);
    export.create(true,true);
}

}

运行它,我可以在控制台中看到DDL,并按照Chris的建议继续

 类似资料:
  • 当我运行这段代码时,没有任何东西被打印到控制台。我应该如何使用logp?

  • SLF4J 提供了 MDC (Mapped Diagnostic Contexts)功能,可以支持用户定义和修改日志的输出格式以及内容。本文将介绍 SOFATracer 集成的 SLF4J MDC功能,方便用户在只简单修改日志配置文件的前提下输出当前 SOFATracer 上下文 TraceId 以及 SpanId 。 使用前提 为了在应用中的日志正确打印 TraceId 和 SpanId 参数,

  • 本文向大家介绍请问如何打印日志?相关面试题,主要包含被问及请问如何打印日志?时的应答技巧和注意事项,需要的朋友参考一下 考察点:异常 cat /var/log/*.log 如果日志在更新,如何实时查看tail -f /var/log/messages 还可以使用watch -d -n 1 cat /var/log/messages -d表示高亮不同的地方,-n表示多少秒刷新一次。

  • 控制台日志是一个强大的方法,用来检查您的页面或应用程序。让我们从console.log()开始,探索其他高级用法。 TL;DR 使用console.log()进行基本日志记录 使用console.erroe()和console.warn()获取醒目的内容 使用console.group()和console.groupEnd()来分组相关消息,避免混乱 使用console.assert()显示条件语

  • SpringBoot默认有日志输出 2017-02-27 16:04:06.644 INFO 15384 --- [ main] com.clsaa.edu.springboot.App : Starting App on eggyer with PID 15384 (D:\Data\MyCode\codeMaven\learn_springboot004\target\classes start

  • Linux平台: set save_java_options=%java_options%-xms512m-xmx1024m-xx:maxpermsize=512m-djava.net.preferIPv4stack=true-djava.net.preferIPv6addresses=false-djavax.xml.parsers.saxparserfactory=com.sun.org.ap