2017-09-16 13 views
0

Hibernateの基本を説明するためにHSQLDBを使用して簡単なプロジェクトを設定しようとしています。 Hibernateの内部をよりよく理解するために、対応するSQL文を表示するためにP6Spyをインストールしたいと思います。P6SpyがHSQLDBで休止状態の更新をログに記録しない

コンソールでSQL Updateステートメントを取得できません。ここで

Hibernate: insert into User (id, name) values (null, ?) 
1505546078019|0|statement|connection 0|insert into User (id, name) values (null, ?)|insert into User (id, name) values (null, 'A') 
Hibernate: update User set name=? where id=? 
1505546078027|0|commit|connection 0|| 

P6Spyや休止状態私のinsert文を示しているが、唯一のディスプレイに更新ステートメントを休止

は、私のソースコードです:

hibernate.cfg.xmlの

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="connection.driver_class">com.p6spy.engine.spy.P6SpyDriver</property> 
     <property name="connection.url">jdbc:p6spy:hsqldb:mem:so</property> 
     <property name="connection.username">sa</property> 
     <property name="connection.password"></property> 
     <property name="dialect">org.hibernate.dialect.HSQLDialect</property> 

     <property name="current_session_context_class">thread</property> 

     <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 

     <property name="show_sql">true</property> 

     <property name="hbm2ddl.auto">update</property> 
    </session-factory> 
</hibernate-configuration> 

コム/そう/ User.java

package com.so; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class User { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 
    @Column 
    private String name; 

    public User() { 
    } 

    public Long getId() { 
     return id; 
    } 

    protected void setId(Long id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see java.lang.Object#toString() 
    */ 
    @Override 
    public String toString() { 
     return "User [id=" + id + ", name=" + name + "]"; 
    } 

} 

COM /そう/メイン

package com.so; 

import org.hibernate.SessionFactory; 
import org.hibernate.cfg.AnnotationConfiguration; 

public class Main { 
    private static final SessionFactory sessionFactory = buildSessionFactory(); 

    public static void main(String[] args) { 
     sessionFactory.getCurrentSession().beginTransaction(); 
     User e = new User(); 
     e.setName("A"); 
     sessionFactory.getCurrentSession().save(e); 
     e.setName("B"); 
     sessionFactory.getCurrentSession().getTransaction().commit(); 
    } 

    private static SessionFactory buildSessionFactory() { 
     try { 
      return new AnnotationConfiguration() 
        .addAnnotatedClass(User.class) 
        .configure().buildSessionFactory(); 
     } catch (Throwable ex) { 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
    } 
} 

のpom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.so</groupId> 
    <artifactId>test-hibernate</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>3.3.2.GA</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-annotations --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-annotations</artifactId> 
      <version>3.3.1.GA</version> 
     </dependency> 

     <!-- Hibernate uses slf4j for logging, for our purposes here use the simple 
      backend --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.25</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
      <version>2.3.4</version> 
     </dependency> 

     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.9.0.GA</version> 
     </dependency> 
     <dependency> 
      <groupId>p6spy</groupId> 
      <artifactId>p6spy</artifactId> 
      <version>3.0.0</version> 
     </dependency> 
    </dependencies> 
</project> 

spy.properties

appender=com.p6spy.engine.spy.appender.StdoutLogger 
+0

ないが、あなたはHSQLDBは​​すべて実行されたSQL http://hsqldb.org/doc/2.0/guide/management-chapt.html#をログに記録するようにゲットmtc_internal_monitoring – fredt

答えて

0

私は同じ問題がありました。私にとっては、hibernateがバッチにアップデートを追加し、デフォルトでバッチコールがp6spyに記録されていないためです。バッチが記録されるように、p6spyのプロパティを更新します。

あなたが求めているものspy.properties

#list of categories to exclude: error, info, batch, debug, statement, 
#commit, rollback and result are valid values 
#excludecategories= 
excludecategories=info,debug,result