0

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

我正在执行本机查询以获取我需要的对象的 id,然后对它们中的每一个执行查找。我使用方法而OpenJPA不是 find findCache(),如果它返回 null 我使用find()方法,在休眠中我只使用find()方法。

我在同一个数据库上执行了这个操作。

经过几次测试后,我发现 OpenJPA 的性能要好得多。

我打印了休眠会话的统计信息(在查询并找到相同的对象之后),并看到hit\miss一级缓存的计数始终为 0。而 OpenJPA 通过使用该findCache方法获取对象显然达到了它的缓存。

如何提高 Hibernate 中 find 的性能?我怀疑它指的是这个工具的一级缓存实现的差异。

另一个事实:我在应用程序运行时使用相同的 EntityManager(我需要最小化创建 EntityManager 的成本 - 我的应用程序是软实时的)

谢谢。

4

2 回答 2

0

Hibernate 中的一级缓存对应会话。因此,如果会话还没有加载给定的对象,它将是一个未命中。您需要启用二级缓存才能跨会话按 id 缓存对象。

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

于 2012-10-31T07:45:22.110 回答
0

首先,你为什么不只检索完整的对象而不是 id。检索多个对象的一个​​ select 语句比单独检索每个项目快很多倍。

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

于 2012-10-31T07:11:09.530 回答