find()方法中的性能问题从OpenJPA 1.2迁移到Hibernate 4.0



i从OpenJPA 1.2迁移到Hiberante 4.0
我正在使用Timesten DB

我正在做一个本机查询以获取所需的对象的ID,然后在每个物体上进行查找。在 OpenJPA中而不是查找中,我使用了 findCache()方法,如果它返回null,则使用 find()方法,在冬眠中,我仅使用 find()方法。

我在同一dB上执行了此操作。

在进行了几次测试后,我看到OpenJPA的性能要好得多。

我打印了冬眠会话的统计信息(查询并找到同一对象),并发现hitmiss计数到第一个级别的缓存始终为0。虽然OpenJPA显然通过使用findCache方法获取对象来达到其缓存。

如何提高冬眠中发现的性能?我怀疑它是指此工具的第一级缓存实现的差异。

另一个事实:我在应用程序运行时间内使用相同的EntityManager(我需要最大程度地减少创建EntityManager的成本 - 我的应用程序是软的实时时间)

谢谢。

首先,为什么不只是检索完整对象而不是ID。检索许多对象的选择语句比单独检索每个项目的速度要快得多。

其次,您可能需要第二级缓存才能进行休眠。第一级缓存主要适用于每个会话。

Hibernate中的第一级缓存对应于会话。因此,如果会话尚未加载给定对象,那将是一个错过。您需要启用第二级缓存能够通过ID跨会话缓存对象。

查看参考文献以获取更多信息http://docs.jboss.org/hibernate/orm/4.1/manual/en-us/html_single/#performance-cache