spring jpa事务查询数

时间:2011-12-08 06:01:02

标签: hibernate jpa spring-transactions

我们正在为我们的项目使用Spring + JPA + Hibernate + MYSQL。使用EHCache,查询缓存和c3p0。

在代码中的某一点,我们为每个请求启动一个新事务。

在离开创建交易的方法之前,我想得到 在当前事务中命中数据库的查询数。

请指导我如何获取此信息。

2 个答案:

答案 0 :(得分:1)

您需要包装JDBC类(请查看P6SPY)。你也可以通过编写一个方面来实现类似的东西 - 你需要使用aspectj作为spring aop将无法将方面应用于非bean的类。

一旦你能够在每个数据库调用上添加额外的逻辑,你就可以创建一个实现,它使用线程本地来分别保存每个事务的计数。

使用spring transaction syncronization支持在事务完成时重置/记录统计信息。

答案 1 :(得分:0)

Hibernate支持statistics并检查this的使用情况。检查org.hibernate.stat.QueryStatistics.getExecutionCount()。但是这会给出在该点之前执行的所有查询的计数,因此您需要在方法执行之前和执行之后获得计数之间的差异。此外,您还需要确保没有其他事务(例如石英预定作业)在db上执行操作以获得准确计数。