JPA find() и refresh() без общего кэша
Интересно, если эти методы эквивалентны, когда общий кэш отключен:
@Stateless
public class EntityService
{
@PersistenceContext
private EntityManager em;
public <T> T findEntity1(Class<T> clazz, long id)
{
return em.find(clazz, id);
}
public <T> T findEntity2(Class<T> clazz, long id)
{
T entity = em.find(clazz, id);
em.refresh(entity);
return entity;
}
}
Эти методы никогда не вызываются внутри существующей транзакции. Доступ к базе данных осуществляется исключительно этим приложением с использованием только JPA, и триггер / хранимая процедура / другое не определены.
Я предполагаю, что они эквивалентны, потому что:
- em.find () будет искать общий кеш (L2), но он пуст (отключен)
- em.find () будет искать свой собственный кэш (L1), но он пуст (предыдущая транзакция отсутствует = em новый)
- em.find () получит доступ к БД
- em.refresh() будет обращаться к БД во второй раз, но в этом сценарии сущность всегда одинакова
Я что-то пропустил?