2013-05-11 132 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