]
valery gorbunov commented on HHH-3383:
--------------------------------------
Same problem with org.hibernate.cache.CacheKey.CacheKey. There key is real entity too not
ID. Would be perfect if will implemented patch
for this issue too. It reduce memory usage and side effects in times.
QueryKey is storing references to entities instead of identifiers
-----------------------------------------------------------------
Key: HHH-3383
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-3383
Project: Hibernate Core
Issue Type: Improvement
Components: caching (L2)
Affects Versions: 3.3.0.CR1
Environment: ehcache 1.5.0b2
Reporter: Manuel Dominguez Sarmiento
Assignee: Steve Ebersole
Fix For: 3.2.7, 3.3.2, 3.5
Attachments: HHH-3383.patch
Context: query caching
Hibernate is storing full entity references when building QueryKeys and the query has
restrictions which reference entities. This happens either with Criteria or HQL queries.
Although this is not incorrect, when the referenced entities reference in turn
"heavy" object graphs, this causes a very significant memory usage increase,
since references to detached entities will remain in the cache. This is even more evident
when using disk persistence with ehcache, since the full object graphs are serialized to
disk.
This could be easily improved (correct me if I'm wrong) by storing ONLY entity
identifiers in the QueryKey instead of full entities, since all the query really needs is
the identifier property. The memory usage would decrease dramatically.
So far the workaround we've found is explicitly using restrictions that reference
identifiers instead of properties in HQL queries, however this is not particularly
elegant, and still leaves open the issue with Criteria queries. The same cannot be done
without criteria.createCriteria() which generates an unnecessary join in most cases.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: