0
我在我的实体上有一个主键(整数),但我也在这些实体上有一个UUID,我在这些实体上进行大量搜索。我想知道是否有可能使该UUID成为关键,以便Hibernate(或其他)不必每次都从数据库获取实体,但可以首先检查其缓存吗?实体上的多个@Id字段/键
我在我的实体上有一个主键(整数),但我也在这些实体上有一个UUID,我在这些实体上进行大量搜索。我想知道是否有可能使该UUID成为关键,以便Hibernate(或其他)不必每次都从数据库获取实体,但可以首先检查其缓存吗?实体上的多个@Id字段/键
我不确定Hibernate。但是,如果您在2.4版本中使用EclipseLink,则支持非ID字段上的缓存索引。然后使用UUID的任何查询都将能够获得缓存命中。
见, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Indexes
这太好了。不幸的是,似乎冬眠没有这个:/ –
休眠有两种不同类型的高速缓存,其可以是有益的。 L2(共享)缓存(由@Id键入)和查询缓存,它将缓存按值查找操作的查询结果。听起来这两个人一起工作可能会给你想要的东西。 – wrschneider
啊,这就对了。有什么方法预先填充L2缓存吗?让我们说,如果所有的实体都被一个select查询获取,然后使用它们的uuid一个接一个地获取 - 我想消除那些一个一个的提取。 –
你可能会春天吗?或者你会考虑使用它吗?因为Spring不像Hibernate那样通过主键来提供缓存机制,而是通过任何值提供缓存机制,所以你可以在这里指定你的UUID。 你也可以在Hibernate中实现自己的缓存机制,但这是重新发明轮子。 – JMelnik