0

我正在尝试收集有关我的休眠/JPA 使用情况的一些统计信息。我已经部署了 Jboss-AS 7.1.1.Final 和 Hibernate-4.1.8,它在 JSF2 项目中使用。

我知道我可以通过 Hibernate 的 Statistics MBean 获得总体统计信息(通过hibernate.generate_statisticsin启用persistence.xml

但我试图确定我的 Hibernate 查询的来源。所以我想我需要听load events,但我不确定我将如何获取导致事件的方法。我想我需要堆栈中不属于org.hibernate包的最顶层方法的名称,然后呢?

有人可以帮助或建议更合适的方法吗?

4

1 回答 1

0

如果您追求的是一种追踪长时间运行查询来源的方法,您可以考虑使用 SQL 注释。Hibernate 允许将注释嵌入到发送到数据库的 SQL 语句中。因此,如果您看到一个查询在您的数据库上占用了大量时间/资源,您可以使用这些注释来帮助追踪它们。启用后,Hibernate 将自动为其生成的任何静态 SQL 添加注释(也称为非原生 SQL 查询、HQL/JPQL 查询或标准查询)。例如,session.load(Person.class, 1) 的 SQL 将包含类似“Loading Person”的注释

甚至可以使用 org.hibernate.Query#setComment(或 JPA 的“org.hibernate.comment”提示)为查询分配注释。

但是,如果您真的想按照建议的方式对其进行跟踪,那么除了堆栈跟踪黑客之外,我真的看不到其他选择。

于 2013-05-17T17:29:12.283 回答