Hibernate only synchronizes its first-level cache one-way by pushing its state to the database and it never synchronizes it the other way... or so I find empirically, because I was unable to find official documentation stating this.
There are other issues here that reference this topic: Hibernate first level cache - does it Sync? and Hibernate criteria.list() and Session refresh which are pretty old as of now.
This very recent article also refers to exactly this behavior as part of:
Hibernate first level cache can have old values, as you can see above that I have put my program to sleep for 10 seconds and in that time I updated the value [...] but it didn’t get reflected in the same session. But in other session, we got the updated value.
Am I missing the place where this is documented in the official documentation: Official documentation (or even as javadoc)?