代码之家  ›  专栏  ›  技术社区  ›  User1

JPA仪器

  •  1
  • User1  · 技术社区  · 15 年前

    在jpa中打开entitymanagerfactory时是否可以看到生成的ddl?我好像有 some problems 但不会产生错误。我没有看到任何类型的日志文件,也没有输出被写入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())。

    3 回复  |  直到 15 年前
        1
  •  1
  •   William    15 年前

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

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

    不太确定它是否会给你你正在寻找的信息,但应该给你一些额外的输出。

        2
  •  0
  •   ChssPly76    15 年前

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

    就ddl而言,我将hibernate与spring结合使用,而不是jpa-so-ymmv,但是:

    1. “hibernate.show_sql”属性和“org.hibernate.sql”调试级别对ddl都没有任何影响。
    2. 将“org.hibernate.tool.hbm2ddl”设置为debug只会在使用schemaexport工具(或EntityManagerFactory在内部使用)时打印DDL。
    3. hibernate的配置(它是模式创建/更新脚本生成的根入口点)根本不打印脚本。

    最好的方法是查看entitymanagerfactory代码,找出脚本的执行位置,并查看是否有日志记录;然后您将知道需要在log4j.properties中配置什么包。

        3
  •  0
  •   Tommy    15 年前

    这并不能解决您的第一个问题,但我总是将mye应用程序名添加到.conversionpattern中。这样,我可以很快地发现是否应用了这些更改,并将多个应用程序记录到同一个文件中。

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