2013-01-16 8 views
6

私はベンダーとしてJPA仕様とHibernateを使用しています。私は何らかの形でDBに送られた生成されたSQL Query(sysoutに出力された)を取得し、それを単純な文字列として保存する必要があります。JPAが生成したSQLクエリを取得するにはどうすればよいですか?

これを行う方法はありますか?

EDIT

私はそれがビート明確にしてみましょう:私は、Hibernateのログは必要ありません。別のDBで同じクエリを実行できるようにする必要があります。したがって、私はSQLクエリをそのまま取得し、通常のString変数に保持する必要があります。

編集2

私はそれをBeanを提供することができ、それが自動的に挿入クエリを生成しますutilのはありますか?私は何とかHibernate Beanをここで使用できますか?私はそれがビートの複合体であることを知っている。

おかげで、

Idob

+0

編集、それはあなたが春のデータJPAモジュールについて尋ねることを、春は春データなしでJPAを使用することができ、非常にはっきりしていない – Alexandr

+0

あなたはこれに対する解決策を見つけましたか? – user1537766

+0

いいクリーンなソリューションがあるように見えません。 EntityManagerをパラメータを介して仕様実装に渡して、ここにあるコードを使用することができます。https://antoniogoncalves.org/2012/05/24/how-to-get-the-jpqlsql-string-from- a-criteriaquery-in-jpa/ – user1567291

答えて

1

あなたがlog4jロギングを有効にして、Hibernateはクエリを表示するためのアペンダを追加する必要があります。

これは、すでにここに記載されている:How to print a query string with parameter values when using Hibernate

+0

これは私が尋ねたものではありません! –

+0

後で使用するためにクエリを文字列として取得する必要があります。ログには表示されません。 –

1

あなたの質問に簡単な答えは、あなたが何をしたい番号は、多くの開発者でも、それはJPA仕様の一部ではありませんでしたがやりたいものですし、したがって、生成されたSQLを取得する能力は、ベンダーが何をすることにしたかに依存します。 Hibernateを使用してSQLを取得する唯一の方法は、ログ経由です。

10

このようなBeanを作成します。

@Bean 
public JpaVendorAdapter jpaVendorAdapter(){ 
    HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); 
    jpaVendorAdapter.setGenerateDdl(true); 
    jpaVendorAdapter.setShowSql(true); 

    return jpaVendorAdapter; 
} 

Springブートを使用している場合は、@ Configurationのどこかに追加してください。

これで作成されたログは、MySQLワークベンチで実行可能です。 JPAとHibernateを使用していると述べました。サポートしているデータベースがJPAでサポートされている場合を除いて、他の方法はありません。その場合、実装できるAbstractJpaVendorAdapterがあります。 、私のためにその作業をLocalContainerEntityManagerFactoryBeanのインスタンスのプロパティを追加する

+0

クール。私のコンソールでSQLステートメントを見ることができる:) – Arundev

0

試してください: - あなたが質問

@EnableJpaRepositories(basePackages = "org.common.persistence.dao") 
public class PersistenceJPAConfig { 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(dataSource()); 
     em.setPackagesToScan(new String[] { "org.common.persistence.model" }); 
     final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     em.setJpaVendorAdapter(vendorAdapter); 
     em.setJpaProperties(additionalProperties()); 
     return em; 
    } 

    final Properties additionalProperties() { 
     final Properties hibernateProperties = new Properties(); 
     hibernateProperties.setProperty("showSql", "true"); 
     hibernateProperties.setProperty("hibernate.show_sql", "true"); 
     hibernateProperties.setProperty("hibernate.format_sql", "true"); 
     hibernateProperties.setProperty("hibernate.query.substitutions", "false"); 
     return hibernateProperties; 
    } 
} 
関連する問題