where e.child = ? とするとクエリキャッシュが効かない?

# 以前にも同じことでハマったことがあったのをすっかり忘れていたのでメモ

Query query = session.createQuery("from Entity e where e.child = ?");
query.setParameter(0, child);

とパラメータにChildエンティティを直接渡すと、クエリキャッシュを有効にしててもキャッシュされないのはなぜ?
もちろん setCacheable, setCacheRegion もやってる。

Query query = session.createQuery("from Entity e where e.child.id = ?");
query.setParameter(0, child.getId());

として、パラメータにはChildエンティティのidを渡すようにするとクエリキャッシュ効くようになる。


今回はOSCacheなんだけど以前にハマった時はEHCacheだった。