Use the Cache.putForExternalRead() method when you are caching something that was just read from an external authoritative source (aka an RDBMS). If the cache is configured for invalidation, that method will not generate an invalidation msg. Then use put() if you are creating something new or have updated something. That *will* generate an invalidation msg, as it should.
The above is a quick description of how the latest Hibernate 2nd Level Cache impl uses JBC; the putForExternalRead() method was added and tweaked and massaged exactly for your use case. ;)
Thanks Brian, I've upgraded my local env to v2 and have started to play with using that call. It looks promising so far!