1. If you have enabled query caching, then the whole cache is invalidated as soon as any record in the corresponding table is modified or a new record is inserted. So, it is advisable to use query caching only with mostly static tables.
2. Object caching works only with load and get apis. It does not work for HQL etc. I had a tough time figuring this out as this is not documented anywhere. I spent a whole weekend going through hibernate source to figure this out.