2013-05-11 139 views
0

有沒有辦法從session.get(class name, id)調用中獲取SQL查詢?我之前看到過這個帖子:How to get SQL from Hibernate Criteria API (*not* for logging),但它不包括查詢。從休眠狀態獲取SQL獲取

說明:我正在尋找一種API方法來獲取查詢字符串,而不是查詢日誌。換句話說,我問,如果有在哪裏,而不是一個方法(如下面toSql):

Foo foo = session.get(Foo.class, id); 

我可以這樣說:

String sqlOrHql = session.get(Foo.class, id).toSql(); 
// execute sqlOrHql to get foo, either through hibernate or manually using JDBC 
+0

請注意,由於以下原因,它應比從條件查詢中獲取SQL更爲複雜:1)如果您的實體與其他實體有關係,則get(clazz,id)可以執行多個SQL語句。 2)如果你有延遲加載,那麼當你得到實體時,並不是所有的語句都會被執行。 – nakosspy 2013-05-13 00:52:16

回答

0

啓用休眠統計在的persistence.xml

<property name="hibernate.generate_statistics">true</property> 

然後使用SessionFactory.getStatistics()並訪問必要的statiscits(可能getQueries())。

欲瞭解更多信息,請參閱休眠統計文檔hereherethis post on SO

編輯

如果你想這樣做沒有記錄,你將不得不使用JDBC驅動程序代理,例如log4jdbcp6spyjdbc-trace-wrapper