如何使 hbm2ddl schemaExport 将模式记录到标准输出?

Posted

技术标签:

【中文标题】如何使 hbm2ddl schemaExport 将模式记录到标准输出?【英文标题】:How to make hbm2ddl schemaExport to log schema to stdout? 【发布时间】:2011-04-19 06:42:33 【问题描述】:

引用persistence.xml:

<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
    <properties>
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.hbm2ddl.auto" value="create" />
        ...
    </properties>
</persistence-unit>

这是我在日志输出中看到的:

Sep 30, 2010 12:03:43 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: Running hbm2ddl schema export
Sep 30, 2010 12:03:43 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: exporting generated schema to database
Sep 30, 2010 12:03:43 PM org.hibernate.tool.hbm2ddl.SchemaExport execute
INFO: schema export complete

但我没有看到自己导出的架构 (SQL)。如何从 Hibernate (3.5.6-Final) 中获取这些信息?

【问题讨论】:

【参考方案1】:

这是一个简化的log4j.xml 配置。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
    <appender name="CA" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/>
        </layout>
    </appender>
    <!-- ### log just the SQL ### -->
    <logger name="org.hibernate.SQL">
        <level value="DEBUG" />
    </logger>
    <!-- ### log JDBC bind parameters ### -->
    <logger name="org.hibernate.type">
        <level value="TRACE" />
    </logger>
    <!-- ### log Hibernate model to schema tool ### -->
    <logger name="org.hibernate.tool.hbm2ddl">
        <level value="DEBUG" />
    </logger>
    <root>
        <level value="WARN"/>
        <appender-ref ref="CA"/>
    </root>
</log4j:configuration>

【讨论】:

【参考方案2】:

以防万一您使用 Spring Boot 偶然发现了这一点。您可以在application.yml 中配置以下内容:

spring.jpa:
  hibernate.ddl-auto: create-drop
logging.level:               
  org.hibernate.tool.hbm2ddl: DEBUG
  org.hibernate.SQL: DEBUG   
  org.hibernate.type: TRACE  

【讨论】:

这很有帮助。一个简单的问题:使用什么配置来将记录的模式导出到文件中?【参考方案3】:

org.hibernate.tool.hbm2ddl 类别的日志记录激活到DEBUG


更新:这是一个简化的logback.xml(我使用 logback 作为日志后端):

<configuration scan="true">

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <Pattern>%dHH:mm:ss.SSS [%thread] %-5level %logger36 - %msg%n</Pattern>
    </layout>
  </appender>

  <!-- ### log just the SQL ### -->
  <logger name="org.hibernate.SQL" level="DEBUG"/>

  <!-- ### log JDBC bind parameters ### -->
  <logger name="org.hibernate.type" level="TRACE"/>

  <logger name="org.hibernate.tool.hbm2ddl" level="DEBUG"/>

  <root level="ERROR">
    <appender-ref ref="STDOUT"/>
  </root>
</configuration>

如果您使用的是 log4j,请调整它(您会在 SO 上找到工作配置)。

【讨论】:

如果我使用 SLF4J 并且还没有任何日志记录配置文件,您能否提示我如何做到这一点..

以上是关于如何使 hbm2ddl schemaExport 将模式记录到标准输出?的主要内容,如果未能解决你的问题,请参考以下文章

在 JUnit/Spring 测试期间触发 Hibernate 的 SchemaExport.execute (hbm2ddl.auto) 的原因是啥?

Grails 抛出错误 hbm2ddl.SchemaExport - HHH000389:不成功

Hibernate SchemaExport 无法首先创建架构

如何让hibernate hbm2ddl生成带分号的SQL?

mybatis 能用jpa 生成表结构吗?要自己写创建sql

hibernate基础04:关联关系(多对一)