Java JPA仪器

Java JPA仪器,java,hibernate,logging,jpa,log4j,Java,Hibernate,Logging,Jpa,Log4j,在JPA中打开EntityManagerFactory时是否可能看到生成的DDL?我似乎有错误,但没有产生错误。我没有看到任何类型的日志文件,也没有向StdOut或StdErr写入输出。我在src/main/resources中有一个log4j.properties: log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdo

在JPA中打开EntityManagerFactory时是否可能看到生成的DDL?我似乎有错误,但没有产生错误。我没有看到任何类型的日志文件,也没有向StdOut或StdErr写入输出。我在src/main/resources中有一个log4j.properties:


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=debug, stdout

log4j.logger.org.hibernate=debug
log4j.logger.org.hibernate.SQL=debug
log4j.logger.org.hibernate.engine.CascadingAction=debug
log4j.logger.org.hibernate.tool.hbm2ddl=debug

我甚至不确定文件是否被识别。有没有办法让我找到答案?如何更好地了解Hibernate和/或JPA的操作?我基本上没有输出(除了程序中的System.out.println()。

尝试在persistence.xml中的持久单元中添加以下内容

<properties>
    <property name="hibernate.show_sql" value="true"/>
</properties>


不太确定它是否会为您提供所需的信息,但应该会为您提供一些额外的输出。

尝试在persistence.xml中的persistence单元中添加以下内容

<properties>
    <property name="hibernate.show_sql" value="true"/>
</properties>


不太确定它是否会提供您正在查找的信息,但应该会提供一些额外的输出。

要确定是否拾取了log4j.properties文件,您可以在其中引入故意错误(例如拼写错误的
ConsoleAppender
类名)。如果确实拾取了文件,Log4j应该放大,或者至少在控制台中显示错误

就DDL而言,我使用的是Hibernate和Spring,而不是JPA和YMMV,但是:

  • “hibernate.show_sql”属性和“org.hibernate.sql”调试级别都不会对DDL产生任何影响
  • 将“org.hibernate.tool.hbm2ddl”设置为DEBUG仅在使用SchemaExport工具(或者EntityManagerFactory在内部使用)时才会打印DDL
  • Hibernate的配置(架构创建/更新脚本生成的根入口点)根本不打印脚本

  • 最好的办法是查看EntityManagerFactory代码,找出脚本的执行位置,并查看是否有任何日志记录围绕它进行;然后,您将知道需要在log4j.properties中配置什么包,以确定是否拾取了log4j.properties文件。您可以在其中引入故意错误(例如,拼写错误的
    ConsoleAppender
    类名)。如果确实拾取了文件,Log4j应该放大,或者至少在控制台中显示错误

    就DDL而言,我使用的是Hibernate和Spring,而不是JPA和YMMV,但是:

  • “hibernate.show_sql”属性和“org.hibernate.sql”调试级别都不会对DDL产生任何影响
  • 将“org.hibernate.tool.hbm2ddl”设置为DEBUG仅在使用SchemaExport工具(或者EntityManagerFactory在内部使用)时才会打印DDL
  • Hibernate的配置(架构创建/更新脚本生成的根入口点)根本不打印脚本

  • 最好的办法是查看EntityManagerFactory代码,找出脚本的执行位置,并查看是否有任何日志记录围绕它进行;然后,您就知道需要在log4j.properties中配置什么包了,这并不能解决您的第一个问题,但我总是将mye应用程序名称添加到.ConversionPattern中。这样,我就可以快速找出是否应用了更改,并将多个应用程序记录到同一个文件中

    log4j.appender.stdout.layout.ConversionPattern=MyApp1 - %d{ABSOLUTE} %5p %c{1}:%L - %m%n
    

    这并不能解决您的第一个问题,但我总是将mye应用程序名称添加到.ConversionPattern中。这样,我就可以快速找出是否应用了更改,并将多个应用程序记录到同一个文件中

    log4j.appender.stdout.layout.ConversionPattern=MyApp1 - %d{ABSOLUTE} %5p %c{1}:%L - %m%n
    

    谢谢我还尝试了hibernate.format\u sql=true。只需打开和关闭会话,即可生成模式,但无输出。我真的被难住了。谢谢。我还尝试了hibernate.format\u sql=true。只需打开和关闭会话,即可生成模式,但无输出。我真的被难住了。