JPA позволяет кэшировать на разных уровнях, так что, даже если все процессы используют один и тот же объект Employee, потребуется тщательный дизайн, чтобы убедиться, что все процессы были синхронизированы с обновленным именем автоматически. Причина этого заключается в том, что EntityManager предназначен для обработки транзакций; чтение из него даст вам управляемый экземпляр объектов, которые затем изолированы от изменений, внесенных в другие EntityManager. Данные в базе данных являются лишь проблемой, когда приходит время писать. Это позволяет вам работать с ними, не беспокоясь о переходе данных из-под вас и управлять любыми проблемами самостоятельно (рекомендуется оптимизировать оптимизацию).
Ваш случай также осложняется тем фактом, что хотя EmployeeBasic и EmployeeDetails могут повторно использовать одну и ту же таблицу базы данных, JPA также позволяет использовать общий кеш. Поэтому внесение изменений в EmployeeBasic будет обновлять его кеш и общий кэш, но кеш EmployeeDetails будет устаревшим. Это похоже на то, что несколько единиц непрерывности получают доступ к тем же таблицам.
Способ, которым это выполняется, заключается в том, что приложение отвечает и может контролировать, когда они хотят обновить свои объекты, уровень кэширования и аннулирование кешей. JPA позволяет отключить общий кэш (используя изолированные кеши), чтобы при чтении из нового EntityManager он всегда переходил к базе данных для данных и видел изменения в любом из объектов. Он также обновляет api (и большинство провайдеров имеют подсказки обновления), которые позволяют принудительно запрашивать базу данных, когда вы знаете, что что-то может потребоваться проверить, хотя следует позаботиться о ее устранении.
EclipseLink (я не знаком с Hibernate) имеет параметры аннулирования кеша и координацию кеша, которые могут использоваться вместе с событиями, чтобы вы могли использовать общие кеши; вы можете использовать события обновления, чтобы вызвать все кэши Employee **, связанные с обновленным, чтобы стать недействительными.